如何使用正则表达式在python中捕获两个连字符之间的单词?

2024-09-30 20:36:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想提取两个连字符之间或一个连字符与零之间的单词。但是假设我不应该知道连字符之前/之间/之后的单词。 我尝试过使用正则表达式模式进行搜索。当使用Web站点测试正则表达式时,捕获的组在python中是不同的

例如:

df = pd.DataFrame({'col1': ['tumPar-PredCorr', 'lung-Med-Pred', 'liver-t1flair-FromMed', 'kidney-t1ce-Pred', 'tumMed-Pred']})

新列中的结果应为:PredCorr、Med、t1flair、t1ce、Pred

使用python中的以下代码:


def extract_signals(row):
    if row!="":
        return re.search(r"([-^]\w+)",row).group()

df["signals"]= df["col1"].apply(extract_signals)

我几乎得到了结果,因为我有-PredCorr,-Med,-t1flair,-t1ce,-Pred 因此,在这些单词之前没有连字符将是非常棒的。 请注意,正则表达式的这些模式在python中也给出相同的结果:([-]\w+)或(-\w+)

多谢各位


Tags: webdf站点模式extractmed字符单词
1条回答
网友
1楼 · 发布于 2024-09-30 20:36:02

你可以用

df['signals'] = df['col1'].str.extract(r'-([^-]+)(?:-|$)')

regex demo。正则表达式匹配

  • --连字符
  • ([^-]+)-组1:除-之外的一个或多个字符
  • (?:-|$)-一个{}或字符串的结尾

Python测试:

>>> import pandas as pd
>>> df = pd.DataFrame({'col1': ['tumPar-PredCorr', 'lung-Med-Pred', 'liver-t1flair-FromMed', 'kidney-t1ce-Pred', 'tumMed-Pred']})
>>> df['col1'].str.extract(r'-([^-]+)(?:-|$)')
          0
0  PredCorr
1       Med
2   t1flair
3      t1ce
4      Pred

相关问题 更多 >