Skip to main content
 首页 » 编程设计

python之在分隔符列表上编写一个循环

2025年05月04日13lyhabc

我必须在 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 或至少,指示第一项,并使脚本停止选择到它遇到的列表的第一项的链?

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

请您参考如下方法:

如果使用交替运算符|,问题就不难了。

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