【问题标题】:How to write regular expression for all text after ":" [duplicate]如何为“:”之后的所有文本编写正则表达式 [重复]
【发布时间】:2019-02-18 04:27:39
【问题描述】:

我需要过滤句子,从整个句子中只选择几个词

例如,我有示例文本:

ID: a9000006        
NSF Org     : DMI
Total Amt.  : $225024

Abstract    :This SBIR proposal is aimed at (1) the synthesis of new ferroelectric liquid crystals with ultra-high polarization,                    
             chemical stability and low viscosity
token = re.compile('a90[0-9][0-9][0-9][0-9][0-9]| [$][\d]+ |')
re.findall(token, filetext)

我得到'a9000006','$225024',但我不知道如何为"NSF Org:" 之后的三个大写字母编写正则表达式,即"DMI""Abstract:" 之后的所有文本

【问题讨论】:

  • [^:]+ 将抓取所有非冒号。
  • 带限制的简单拆分将比正则表达式高效得多。

标签: python regex


【解决方案1】:

如果您想创建一个单一的正则表达式,它将匹配这 4 个字段中的每一个,并对每个字段进行显式检查,然后使用 this regex::\s?(a90[\d]+|[$][\d]+|[A-Z]{3}|.*$)

>>> token = re.compile(r':\s?(a90[\d]+|[$][\d]+|[A-Z]{3}|.*$)', re.DOTALL)  # flag needed
>>> re.findall(token, filetext)
['a9000006', 'DMI', '$225024', 'This SBIR proposal is aimed at (1) the synthesis of new ferroelectric liquid crystals wi
th ultra-high polarization,                    \n             chemical stability and low viscosity']
>>> 

但是,由于您要同时搜索所有内容,因此最好使用将所有 4 个一起匹配且通用的一个,例如 this answer here 中的那个。

【讨论】:

  • 感谢您回答我的问题,如果我只想在“NSF Org:”之后写“DMI”,您能告诉我应该写什么正则表达式吗?
  • 正则表达式中的那部分是[A-Z]{3}。如果您只想要该部分的整个正则表达式,则拆分我在| 中给出的那个(可选匹配条件,这是与4个字段中的每一个匹配的规则)。要仅匹配“DMI”,请使用:r':\s([A-Z]{3})'
  • 非常感谢,但我使用 (r'NSF Org\s*:\s*(.*)') 并且效果也很好
【解决方案2】:

这必须做的工作。

: .*

您可以在这里查看。 check

【讨论】:

  • 我认为这与 OP 正在寻找的内容不符 regex101.com/r/mXoZQs/1
  • 我已经更新了我的答案
  • 但现在它也匹配冒号和后面的空格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多