【问题标题】:Regex to match a particular word followed by another, along with a boundary identifier正则表达式匹配一个特定的单词,然后是另一个单词,以及一个边界标识符
【发布时间】:2015-02-28 00:27:01
【问题描述】:

我正在 Python 中进行正则表达式匹配。我试图遵循一些组合但没有工作。我对正则表达式完全陌生。我的问题是,我的字符串如下。

string = ''' World is moving towards a particular point'''

我想要一个解决方案来检查单词“towards”是否紧跟在“moving”之后,如果是,我想选择该行的其余部分(在“towards”之后),直到它以“。”结尾。或'-'。我是新手。请提供一些好的建议。

【问题讨论】:

  • "World is moving towards me. And you." 怎么样 - 究竟应该匹配什么?只有me.?还是整条线?

标签: python regex text


【解决方案1】:

类似

re.findall (r'(?<=moving towards )[^-.]*', string)
['a particular point']
  • (?&lt;=moving towards ) 查看断言后面。断言字符串前面有moving towards

  • [^-.]* 匹配除-. 以外的任何内容


如何匹配

World is moving towards a particular point
                        |
     (?<=moving towards ) #checks if this position is presceded by moving towards 
                          #yes, hence proceeds with the rest of the regex pattern

World is moving towards a particular point
                        |
                      [^-.]

World is moving towards a particular point
                         |
                       [^-.] 

# and so on


World is moving towards a particular point
                                         |
                                       [^-.]

Regex Demo

【讨论】:

  • @user3116355 欢迎您 :) 随意接受您认为有用的任何答案。
  • @MarounMaroun 非常感谢:)。当人们在新的一年里感谢你时感觉很好!!!
【解决方案2】:
import re
str = ''' World is moving towards a particular point'''
match = re.search('moving towards\s+([^.-]+)', str)
if match:
   var = match.group(1)

Output >>> a particular point     

正则表达式调试链接

https://www.regex101.com/r/wV7iC7/1

【讨论】:

    【解决方案3】:

    您需要使用 negative-look around 。但是当您的字符串中有.- 时,如果没有,则可以使用@nu11p01n73R 的答案。 :

    >>> string = ''' World is moving towards a particular point.'''
    >>> re.search(r'(?<=moving towards).*(?=\.|-)',string).group(0)
    ' a particular point'
    

    (?&lt;=moving towards).* 是在moving towards 之后的所有 (.*) 的否定后向匹配

    (?=\.|-)' 是否定的后视,匹配所有之前的(\.|-),这意味着.-

    Debuggex Demo

    【讨论】:

    • 交替的范围错误,第二个点应该被转义,你需要一个惰性量词才能使它正常工作......
    • @TimPietzcker 是的,但是 OP 说 直到它以 '.' 结尾或'-'。这让我很困惑
    • 嗯,一个可选的前瞻断言也可以完全删除。它根本没有效果。此外,您的两个环视断言都是积极的,而不是消极的。
    • @Kasra - 它也是工人。但是你能简单解释一下吗?
    • @user3116355 是的,请给一些分钟
    【解决方案4】:

    要重复这个问题,您要检查在给定的string 中,“moving”一词是否后跟“towards”。这是使用parse 模块的一种方法:

    import parse
    string = "World is moving towards a particular point"
    
    fmt = "moving {:w}"
    
    result = parse.search(fmt, string)
    
    assert result[0] == "towards"
    

    请注意,:w 格式规范会导致结果匹配字母和下划线。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2011-09-02
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多