2

我必须在 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)

但是在我要分析的不同页面中,分隔符并不总是相同的,也不总是相同的顺序。

Example2 = d2 一些东西 d3没有d4 一些东西 d5

因此,我想问你两件事。假设我创建了我在 html 页面中找到的所有分隔符的列表,

Delimiters_list = [d1, d2, d3]

1 是否可以确保脚本查找所有可能的配置,例如 d1 + d2、d2 + d6、dn + dn?

2或至少,指示第一项,并使脚本停止选择链到它遇到的列表的第一项?

这对我来说是一个非常困难的问题,我知道我可能不清楚,但我提前感谢那些试图检查它并帮助我的人。

4

2 回答 2

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)

我希望你觉得这对你有帮助。

于 2012-06-19T14:18:59.670 回答
0

如果您使用交替运算符,问题并不难,|.

    (d1|d2|d3|d4|d25)(.*?)(?=d1|d2|d3|d4|d25)

这边走,

  1. 如果需要,您将在第 1 组中捕获起始分隔符;
  2. 您将不贪婪地在第 2 组中捕获“一些东西”;
  3. 并且通过使用前瞻断言,您还不会“吃掉”下一个分隔符,因此您可以继续使用相同的正则表达式匹配其余数据。

在此处查看此正则表达式的演示: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(...)返回\*,这样您的分隔符就不会被翻译为正则表达式量词。

于 2012-06-19T15:15:48.453 回答