【问题标题】:Python: How to print a regex matched string?Python:如何打印正则表达式匹配的字符串?
【发布时间】:2013-09-16 16:48:38
【问题描述】:

我想匹配字符串的一部分(一个特定的单词)并打印出来。正是grep -o 所做的。 例如,我的词是“yellow dog”,它可以在跨越多行的字符串中找到。

[34343] | ****. "Example": <one>, yellow dog
        tstring0 123
        tstring1 456
        tstring2 789

让我们试试这个正则表达式mydog = re.compile(', .*\n') 然后 if mydog.search(string): 仅打印匹配的单词。

如何在输出中只得到“yellow dog”?

【问题讨论】:

    标签: python regex python-2.7


    【解决方案1】:

    使用捕获组和 findall:

    >>> import re
    >>> s = """[34343] | ****. "Example": <one>, yellow dog
    ...         tstring0 123
    ...         tstring1 456
    ...         tstring2 789"""
    >>> mydog = re.compile(', (.*)\n')
    >>> mydog.findall(s)
    ['yellow dog']
    

    如果你只想要第一个匹配,那么:

    >>> mydog.findall(s)[0]
    'yellow dog'
    

    注意:当s 不包含匹配项时,您需要处理IndexError

    【讨论】:

      【解决方案2】:

      如果不指定捕获组,则整个表达式匹配的文本将包含在matchResult.group(0) 中。在您的情况下,这将是', yellow dog\n'。如果你只想要yellow dow,你应该在表达式中添加一个捕获组:, (.*?)\n。请注意,我还将.* 更改为.*?,以便它不会贪婪并在找到第一个换行符时停止。

      >>> s = '''[34343] | ****. "Example": <one>, yellow dog
              tstring0 123
              tstring1 456
              tstring2 789'''
      >>> mydog = re.compile(', (.*?)\n')
      >>> matchResult = mydog.search(s)
      >>> if matchResult:
              print(matchResult.group(1))
      
      yellow dog
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-29
        • 2011-11-28
        • 2020-06-17
        • 2023-04-02
        • 1970-01-01
        • 2012-06-05
        • 2013-12-25
        相关资源
        最近更新 更多