首页 > 解决方案 > Python Regex 删除括号中的注释或数字

问题描述

我正在尝试使用正则表达式删除行号和注释,但它还不起作用:

import re
string = """(1) At what time.!? [asdf] School-
(2) bus. So late, already.!? [ghjk]"""

#res = re.sub(r"[\(\[].*?[\)\]]", "", string)

res = re.sub("(\d+) ","", res)
res = re.sub("[.*]","", res)
res = re.sub(r"-\s","", res)
res = re.sub(r"[^\w\säüöß]","", res)
res = re.sub("-\n","", res)
print(res.split())

所以我试图用我的#commented 行删除括号 () 和 [] 中的任何内容,但后来我被每行开头的空格卡住了。然后我决定将其拆分并提出五种 re.sub 方法。

结果应该是这样的:

['At', 'what', 'time', 'Schoolbus', 'So', 'late', 'already']

我坚持没有被删除的行号,尽管它们在 () 中并且应该消失了。然后导致我的 res.sub() 用于将单词与从校车到校车的“-”连接起来也不起作用。

标签: pythonregex

解决方案


您可以使用此sub + findall解决方案:

import re

string = """(1) At what time.!? [asdf] School-
(2) bus. So late, already.!? [ghjk]"""

print (re.findall(r'\b\w+(?:-\w+)*', re.sub(r'(\([^)]*\)|\[[^]]*\]|-)\s*', '', string)))

输出:

['At', 'what', 'time', 'Schoolbus', 'So', 'late', 'already']

细节:

  • re.sub(r'(\([^)]*\)|\[[^]]*\]|-)\s*', '', string): 删除后跟 0 个或多个空格的所有(...)and[...]或字符串-
  • \b\w+: 匹配以单词边界开头的 1+ 个单词字符

推荐阅读