如何在python中使用regex捕获两个连字符之间的单词?



我想提取介于两个连字符之间或介于一个连字符和无之间的单词。但是假设我不应该知道连字符之前/之间/之后的单词。我尝试过使用正则表达式模式进行研究。当使用website测试正则表达式时,捕获的组在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+)

非常感谢!

可以使用

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

参见regex演示。正则表达式匹配

  • --连字符
  • ([^-]+)-第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

最新更新