Python正则表达式用于排除包含特定单词的字符串

发布于 2025-01-14 17:38:35 字数 698 浏览 3 评论 0原文

我试图在抓取维基百科时使用正则表达式来排除消歧页面。我四处寻找有关使用负向前瞻的技巧和 我似乎无法让它发挥作用。我想我错过了一些基本的东西 关于它的用途,但到目前为止我完全一无所知。有人可以吗 给我指明正确的方向吗? (我不想使用 if y 中的“消歧义” ,我试图抓住 负前瞻的工作原理。)谢谢。 这是代码:

list_links = ['/wiki/Oolong_(disambiguation)', '/wiki/File:Mi_Lan_Xiang_Oolong_Tea_cropped.jpg',
  '/wiki/Taiwanese_tea', '/wiki/Tung-ting_tea',
 '/wiki/Nantou_County', '/wiki/Taiwan', '/wiki/Dongfang_Meiren',
  '/wiki/Alishan_National_Scenic_Area', '/wiki/Chiayi_County',
 '/wiki/Dayuling', '/wiki/Baozhong_tea', '/wiki/Pinglin_Township']

def findString(string):
  regex1 = r'(/wiki/)(_\($)(!?disambiguation)'
  for x in list_links:
      y =  re.findall(regex1, x)
      print(y)

findString(list_links)```

I am trying to use a regex to exclude disambiguation pages when scraping wikipedia. I looked around for tips about using the negative lookahead and
I cannot seem to make it work. I think I am missing something fundamental
about its use but as of now I am totally clueless. Could someone please
point me in the right direction? (I don't want to use
if 'disambiguation' in y
, I am trying to grasp
the workings of the negative lookahead.) Thank you.
Here is the code:

list_links = ['/wiki/Oolong_(disambiguation)', '/wiki/File:Mi_Lan_Xiang_Oolong_Tea_cropped.jpg',
  '/wiki/Taiwanese_tea', '/wiki/Tung-ting_tea',
 '/wiki/Nantou_County', '/wiki/Taiwan', '/wiki/Dongfang_Meiren',
  '/wiki/Alishan_National_Scenic_Area', '/wiki/Chiayi_County',
 '/wiki/Dayuling', '/wiki/Baozhong_tea', '/wiki/Pinglin_Township']

def findString(string):
  regex1 = r'(/wiki/)(_\($)(!?disambiguation)'
  for x in list_links:
      y =  re.findall(regex1, x)
      print(y)

findString(list_links)```

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

风为裳 2025-01-21 17:38:35

您可以根据需要使用正则表达式之一。此外,我还对函数定义进行了一些更改以尊重 PEP。

def remove_disambiguation_link(list_of_links):
    regex = "(.*)\((!?disambiguation)\)"
    # regex = "(/wiki/)(.*)\((!?disambiguation)\)"
    # return [links for links in list_of_links if not re.search(regex, links)]
    return list(filter(lambda link: not re.search(regex, link), list_of_links))
list_links = remove_disambiguation_link(list_links)
print(list_links)
[
    "/wiki/File:Mi_Lan_Xiang_Oolong_Tea_cropped.jpg",
    "/wiki/Taiwanese_tea",
    "/wiki/Tung-ting_tea",
    "/wiki/Nantou_County",
    "/wiki/Taiwan",
    "/wiki/Dongfang_Meiren",
    "/wiki/Alishan_National_Scenic_Area",
    "/wiki/Chiayi_County",
    "/wiki/Dayuling",
    "/wiki/Baozhong_tea",
    "/wiki/Pinglin_Township",
]

You can use one of the regex, based on your need. Also, I have added some changes to the function definition to respect PEP.

def remove_disambiguation_link(list_of_links):
    regex = "(.*)\((!?disambiguation)\)"
    # regex = "(/wiki/)(.*)\((!?disambiguation)\)"
    # return [links for links in list_of_links if not re.search(regex, links)]
    return list(filter(lambda link: not re.search(regex, link), list_of_links))
list_links = remove_disambiguation_link(list_links)
print(list_links)
[
    "/wiki/File:Mi_Lan_Xiang_Oolong_Tea_cropped.jpg",
    "/wiki/Taiwanese_tea",
    "/wiki/Tung-ting_tea",
    "/wiki/Nantou_County",
    "/wiki/Taiwan",
    "/wiki/Dongfang_Meiren",
    "/wiki/Alishan_National_Scenic_Area",
    "/wiki/Chiayi_County",
    "/wiki/Dayuling",
    "/wiki/Baozhong_tea",
    "/wiki/Pinglin_Township",
]
要走干脆点 2025-01-21 17:38:35

对于您的情况,最简单的解决方案就是不使用正则表达式......
只是做类似的事情:

list_links = ['/wiki/Oolong_(disambiguation)', '/wiki/File:Mi_Lan_Xiang_Oolong_Tea_cropped.jpg',
  '/wiki/Taiwanese_tea', '/wiki/Tung-ting_tea',
 '/wiki/Nantou_County', '/wiki/Taiwan', '/wiki/Dongfang_Meiren',
  '/wiki/Alishan_National_Scenic_Area', '/wiki/Chiayi_County',
 '/wiki/Dayuling', '/wiki/Baozhong_tea', '/wiki/Pinglin_Township']

def findString(string):
  regex1 = r'(/wiki/)(_\($)'
  for x in string:
      if 'disambiguation' in x:
          continue  # skip
      y =  re.findall(regex1, x)
      print(y)

findString(list_links)

For your case the simplest solution would just be not using regex for that...
just do something like:

list_links = ['/wiki/Oolong_(disambiguation)', '/wiki/File:Mi_Lan_Xiang_Oolong_Tea_cropped.jpg',
  '/wiki/Taiwanese_tea', '/wiki/Tung-ting_tea',
 '/wiki/Nantou_County', '/wiki/Taiwan', '/wiki/Dongfang_Meiren',
  '/wiki/Alishan_National_Scenic_Area', '/wiki/Chiayi_County',
 '/wiki/Dayuling', '/wiki/Baozhong_tea', '/wiki/Pinglin_Township']

def findString(string):
  regex1 = r'(/wiki/)(_\($)'
  for x in string:
      if 'disambiguation' in x:
          continue  # skip
      y =  re.findall(regex1, x)
      print(y)

findString(list_links)
无戏配角 2025-01-21 17:38:35

您不需要使用正则表达式。您可以遍历 list_links 并检查您要查找的字符串“disambiguation”是否位于 list_links 中的每个项目中。

list_links = ['/wiki/Oolong_(disambiguation)', '/wiki/File:Mi_Lan_Xiang_Oolong_Tea_cropped.jpg',
  '/wiki/Taiwanese_tea', '/wiki/Tung-ting_tea',
 '/wiki/Nantou_County', '/wiki/Taiwan', '/wiki/Dongfang_Meiren',
  '/wiki/Alishan_National_Scenic_Area', '/wiki/Chiayi_County',
 '/wiki/Dayuling', '/wiki/Baozhong_tea', '/wiki/Pinglin_Township']

to_find = 'disambiguation'

def findString(list_links):
    for link in list_links:
        if to_find in link:
            # get indice of match
            match_index = list_links.index(link)
            # remove match from list
            list_links.pop(match_index)
    # print new list without 'disambiguation' items
    print(list_links)        

findString(list_links)

You do not need to use regex. You can iterate through list_links and check if the string you are looking for, 'disambiguation` is in each item in list_links.

list_links = ['/wiki/Oolong_(disambiguation)', '/wiki/File:Mi_Lan_Xiang_Oolong_Tea_cropped.jpg',
  '/wiki/Taiwanese_tea', '/wiki/Tung-ting_tea',
 '/wiki/Nantou_County', '/wiki/Taiwan', '/wiki/Dongfang_Meiren',
  '/wiki/Alishan_National_Scenic_Area', '/wiki/Chiayi_County',
 '/wiki/Dayuling', '/wiki/Baozhong_tea', '/wiki/Pinglin_Township']

to_find = 'disambiguation'

def findString(list_links):
    for link in list_links:
        if to_find in link:
            # get indice of match
            match_index = list_links.index(link)
            # remove match from list
            list_links.pop(match_index)
    # print new list without 'disambiguation' items
    print(list_links)        

findString(list_links)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文