我目前正在尝试编写一个带两个输入的函数:
1 - 网页的网址 2 - 包含一些正则表达式的文本文件的名称
我的函数应该逐行读取文本文件(每行是一个不同的正则表达式),然后它应该在网页源代码上执行给定的正则表达式。但是,我遇到了麻烦:
例如
假设我想要一个URL为http://www.yelp.com/biz/liberty-grill-cork的Yelp中包含的地址
正则表达式是\<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)
添加,我想从文本文件中读取正则表达式的原因是我的函数代码可以保持不变,我可以轻松地更改我的正则表达式列表。如果有人能提出任何其他可能很好的选择。
答案 0 :(得分:1)
你的字符串有一些反斜杠和其他东西被转义以避免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*<
答案 1 :(得分:1)
好的,我设法让它运转起来。对于想要从文本文件中读取正则表达式的任何人,您需要执行以下操作:
总体而言,您的代码应该类似于:
a = open("test_file.txt","r")
line = a.readline()
line = line.strip('\n')
result = re.search(line,page_source_code)