[英]How to capture a word between two hyphens in python with regex?
我想提取两个连字符之间或一个连字符之间的单词。 但是假设我不应该知道连字符之前/之间/之后的单词。 我尝试过使用正则表达式模式进行 re.search。 使用网站测试正则表达式时,捕获的组在 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'-([^-]+)(?:-|$)')
请参阅正则表达式演示。 正则表达式匹配
-
- 一个连字符([^-]+)
- 第 1 组:除-
之外的一个或多个字符(?:-|$)
- 字符串的-
或结尾。蟒蛇测试:
>>> 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.