来自文件的Python 3正则表达式

问题描述 投票:1回答:2

我正在尝试将几乎没有格式化的文本解析为价目表。我将一堆正则表达式模式存储在一个文件中,如下所示:

[^S](7).*(\+|(plus)|➕).*(128)

当我尝试验证是否存在这样的匹配时:

def trMatch(line):
  for tr in trs:
    nr = re.compile(tr.nameReg, re.IGNORECASE)
    cr = re.compile(tr.colourReg, re.IGNORECASE)
    if (nr.search(line.text) is not None): doStuff()

我收到一个错误

File "<stdin>", line 1, in <module>
  File "<stdin>", line 10, in go
  File "<stdin>", line 3, in trMatch
  File "/usr/lib/python3.5/re.py", line 224, in compile
    return _compile(pattern, flags)
  File "/usr/lib/python3.5/re.py", line 292, in _compile
    raise TypeError("first argument must be string or compiled pattern")
TypeError: first argument must be string or compiled pattern

我认为它无法编译模式,因为它缺少'r'标志。是否有正确的方法使这种方法合作?

谢谢!

regex python-3.x
2个回答
0
投票

使用正则表达式时,r""语法不是必需的 - 这只是用于转义较少字符的辅助语法,但它会产生相同的字符串。见What exactly do "u" and "r" string flags do, and what are raw string literals?

我不确定你的代码中有什么trs,但是很好的猜测tr.nameRegtr.colourReg不是字符串:尝试调试或打印它们并确保它们具有正确的值。


0
投票

事实证明,re.search并没有像我假设的那样省略空模式。我添加了一个简单的检查是否有一个有效的模式和字符串可以查看。像魅力一样工作

© www.soinside.com 2019 - 2024. All rights reserved.