我正在尝试将几乎没有格式化的文本解析为价目表。我将一堆正则表达式模式存储在一个文件中,如下所示:
[^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'标志。是否有正确的方法使这种方法合作?
谢谢!
使用正则表达式时,r""
语法不是必需的 - 这只是用于转义较少字符的辅助语法,但它会产生相同的字符串。见What exactly do "u" and "r" string flags do, and what are raw string literals?
我不确定你的代码中有什么trs
,但是很好的猜测tr.nameReg
和tr.colourReg
不是字符串:尝试调试或打印它们并确保它们具有正确的值。
事实证明,re.search并没有像我假设的那样省略空模式。我添加了一个简单的检查是否有一个有效的模式和字符串可以查看。像魅力一样工作