【问题标题】:python 3 regular expression match string meta-characterpython 3正则表达式匹配字符串元字符
【发布时间】:2014-08-01 18:51:26
【问题描述】:

我想写一行正则表达式,它可以匹配像“(2000)”这样的字符串,括号中的年份。然后我可以检查是否有任何字符串包含子字符串“2000”。

例如,我希望正则表达式匹配 (2000) 而不是 2000、或 (20000) 或 (200)。 也就是说:它们必须恰好有四个数字,第一个数字在1和2之间;他们必须包括括号。

2000 年只是我使用的一个示例,但我真的希望正则表达式包含所有可能的年份。

【问题讨论】:

  • 你想要什么?你能给我们字符串匹配和不匹配的样本吗?
  • 你可以简单地使用\(\d+\)
  • 谢谢,由([1-2](\d{3}))解决

标签: python regex string python-3.x string-matching


【解决方案1】:

你必须转义开闭括号,

>>> import re
>>> str = """foo(2000)bar(1000)foobar2000"""
>>> regex = r'\(2000\)'
>>> result = re.findall(regex, str)
>>> print(result)
['(2000)']

>>> import re
>>> str = """foo(2000)bar(1000)foobar(2014)barfoo(2020)"""
>>> regex = r'\([0-9]{4}\)'
>>> result = re.findall(regex, str)
>>> print(result)
['(2000)', '(1000)', '(2014)', '(2020)']

它匹配括号内的所有四位数字(年份)。

【讨论】:

    【解决方案2】:

    特殊字符需要用反斜杠转义。括号 ( 变为 \(。因此(2000) 变为\(2000\)

    然后你可以这样做:

    if re.search(r"\(2000\)", subject):
        # Successful match
    else:
        # Match attempt failed
    

    【讨论】:

      【解决方案3】:
      >>> import re
      >>> x = re.match(r'\((\d*?)\)', "(2000)")
      >>> x.group(1)
      '2000'
      

      【讨论】:

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