我目前正在尝试编写一个接受两个输入的函数:
1 - 网页的 URL 2 - 包含一些正则表达式的文本文件的名称
我的函数应该逐行读取文本文件(每行是一个不同的正则表达式),然后它应该在网页源代码上执行给定的正则表达式。但是,我在执行此操作时遇到了麻烦:
例子 假设我想要 Yelp 中包含的地址,URL = http://www.yelp.com/biz/liberty-grill-cork 正则表达式是 \<address\>\s*([^<]*)\\b\s*< .在 Python 中,我然后运行:
address = re.search('\<address\>\s*([^<]*)\\b\s*<', web_page_source_code)
上面的会工作,但是,如果我只是将正则表达式按原样写在文本文件中,然后从文本文件中读取正则表达式,那么它就不会工作。所以从文本文件读取正则表达式是导致问题的原因,我该如何纠正这个问题?
编辑:这就是我从文本文件中读取正则表达式的方式:
with open("test_file.txt","r") as file:
for regex in file:
address = re.search(regex, web_page_source_code)
补充一下,我想从文本文件中读取正则表达式的原因是我的函数代码可以保持不变,并且我可以轻松地更改我的正则表达式列表。如果有人可以提出任何其他替代方案,那就太好了。
请您参考如下方法:
您的字符串有一些反斜杠和其他内容被转义以避免在 Python 字符串中具有特殊含义,而不仅仅是正则表达式本身。
您可以轻松验证打印从文件加载的字符串时发生的情况。如果您的反斜杠加倍,则说明您做错了。
你想要在文件中的文本是:
文件
\<address\>\s*([^<]*)\b\s*<
检查方法如下
In [1]: a = open('testfile.txt')
In [2]: line = a.readline()
-- this is the line as you'd see it in python code when properly escaped
In [3]: line
Out[3]: '\\<address\\>\\s*([^<]*)\\b\\s*<\n'
-- this is what it actually means (what re will use)
In [4]: print(line)
\<address\>\s*([^<]*)\b\s*<
