繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM