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