代码之家  ›  专栏  ›  技术社区  ›  Anoushiravan R

正则表达式错误:位置17处的括号不平衡

  •  1
  • Anoushiravan R  · 技术社区  · 4 年前

    我一直想用regex从下面的字符串中提取月份名称,尽管我的regex在regex101这样的平台上工作,但我似乎无法提取单词“August”。

    import re
    s = "word\anyword\2021\August\202108_filename.csv"
    re.findall("\d+\\([[:alpha:]]+)\\\d+", s)
    

    这将导致以下错误:

    错误:位置17处括号不平衡

    我也试过使用 re.compile , re.escape 根据之前处理相同错误的帖子的建议,但它们似乎都不起作用。

    如果您能提供任何帮助,并解释一下为什么这样做不起作用,我们将不胜感激。

    1 回复  |  直到 4 年前
        1
  •  4
  •   wjandrea sebs    4 年前

    你可以用

    import re
    s = r"word\anyword\2021\August\202108_filename.csv"
    m = re.search(r"\d+\\([a-zA-Z]+)\\\d+", s)
    if m:
        print(m.group(1))
    

    看到了吗 Python demo .

    这里有三个主要问题:

    • 输入字符串应与regex101中使用的字符串相同。com,即您需要确保在Python代码中使用文本反斜杠,因此输入文本和正则表达式都使用原始字符串文本
    • POSIX字符类是 not supported by Python re 所以 [[:alpha:]]+ 应该用一些等效的模式来代替,比如, [A-Za-z]+ [^\W\d_]+
    • 因为你似乎只期待一场比赛(只有一场) August (字符串中的月份)名称),您不需要 re.findall ,你可以使用 re.search .只使用 重新。芬德尔 当需要从字符串中提取多个匹配项时。

    此外,请参见以下帖子: