【问题标题】:regex get string after two keywords (from and to)正则表达式在两个关键字(从和到)之后获取字符串
【发布时间】:2021-01-05 03:26:09
【问题描述】:

我有字符串

changed the applicant's name from Brian David Vaughn to Brian Hamish Vaughn

我将使用正则表达式在关键字 'from' 和 'to' 单词之后取字符串的名称。我试图使用这种模式在'from'之后获取字符串:

(?<=from)\s+\S+\s\S+(?:\s\S+){0,1}

但是,从两个关键字中获取是行不通的,比如这个模式:

(?<=from|to)\s+\S+\s\S+(?:\s\S+){0,1}

正确的模式如何?

【问题讨论】:

  • 预期输出是什么?
  • 'Brian David Vaughn' 和'Brian Hamish Vaughn'

标签: regex


【解决方案1】:

这行得通:

import re
s = "changed the applicant's name from Brian David Vaughn to Brian Hamish Vaughn"
matches = re.findall("(?:from|to)\W(.+?)(?=\W[a-z]|$)", s)

给予

['Brian David Vaughn', 'Brian Hamish Vaughn']

【讨论】:

    【解决方案2】:

    这应该很简单,因为你有关键字

    >>> import re
    >>> s1 = "changed the applicant's name from Brian David Vaughn to Brian Hamish Vaughn"
    >>> re.findall('(?=.*) from (.*) to (.*)',s1)
    [('Brian David Vaughn', 'Brian Hamish Vaughn')]
    

    【讨论】:

      【解决方案3】:

      除了指定要匹配的单词出现次数之外,另一种选择是使用\S 匹配至少一个非空白字符,然后匹配尽可能少的字符,直到下次遇到from 或@987654324 @ 或字符串结尾$

      \b(?:from|to)\s+(\S.*?)(?=\s+(?:from|to)\b|$)
      

      说明

      • \b(?:from|to)\s+ 匹配 from 或 to 以及 1+ 个空白字符
      • (\S.*?) 捕获组 1,匹配单​​个非空白字符,后跟尽可能少的字符
      • (?= 正向前瞻
        • \s+(?:from|to)\b 匹配 1+ 个空格字符,后跟 fromto
        • |或者
        • $ 字符串结束
      • ) 关闭前瞻

      Regex demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-30
        • 2014-12-08
        • 2016-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-12
        相关资源
        最近更新 更多