我必须在html文件中隔离部分字符串。我以为我可以成功,但数据结构真的很混乱。我是一个非常初学者,所以正则表达式可能是一个坏主意。我可以补充说,逗号或分号不一致,不能被选为分隔符。在任何情况下,我做了什么,让我从一个例子开始。 假设这是放在变量中的html
示例= d1 d2一些东西有些东西d3 d4 d5有些东西
如果分隔符是一致的,我可以使用以下脚本恢复我感兴趣的“一些东西”:
for url in open("url-repository.csv", "rt").readlines():
variable1 = urllib2.urlopen(url[:-1]).read()
a = re.compile('d1(.*?)\"d2')
b = a.search(vqriable1)
if b:
c = b.group(1)
list_of_d1.append(c)
但是,在我必须分析的不同页面中,分隔符并不总是相同,也不总是以相同的顺序。
示例2 = d2有些东西d3 没有 d4有些东西d5
因此,我会问你两件事。假设我创建了一个我在html页面中找到的所有分隔符的列表,
Delimiters_list = [d1, d2, d3]
1是否可以确保脚本查找所有可能的配置,例如d1 + d2,d2 + d6,dn + dn?
2或至少表示第一个术语,并使脚本停止选择链到它遇到的列表的第一个术语?
这对我来说是一个非常困难的问题,我知道我可能不清楚,但我提前感谢那些试图检查并帮助我的人。
答案 0 :(得分:0)
以下Python示例应该可以解决您的问题。
dels = [d1, d2, d3]
combs = []
for d1 in dels:
for d2 in dels:
combs.append(re.compile(d1 + '(.*?)\"' + d2)
for comb in combs:
check_for_matches(comb, string)
我希望你觉得它很有帮助。
答案 1 :(得分:0)
如果使用交替运算符|
,问题并不困难。
(d1|d2|d3|d4|d25)(.*?)(?=d1|d2|d3|d4|d25)
这样,
在此处查看此正则表达式的演示:http://rubular.com/r/DJVegfD3Ul。
注意:可悲的是我不懂Python,所以我不会尝试编写任何代码。但是将所有分隔符加入上面的表单应该是一项微不足道的任务。请参阅下面的评论中的警告。
<强>更新强>
这是我第一次写Python,所以原谅我的错误。
# start with an array of delimeters
delimeters = [d1, d2, d3]
# start with a blank string
regex_delim = ''
# build the "delimiters regex" using alternation
for delimeter in delimeters:
regex_delim += re.escape(delimeter) + '|'
# remove the extra '|' at the end
regex_delim = regex_delim[:-1]
# compile the regex
regex_obj = re.compile('(' + regex_delim + ')(.*?)(?=' + regex_delim + ')')
# and that should be it!
for match in regex_obj.finditer(html_str):
print match.group(2)
如果分隔符中包含特殊字符,则re.escape(delimiter)
是必需的。例如,如果您的分隔符为*
,则re.escape(...)
会返回\*
,因此您的分隔符不会转换为正则表达式量词。