python - 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() 用于将单词与从校车到校车的“-”连接起来也不起作用。
解决方案
您可以使用此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+ 个单词字符
推荐阅读
- codeigniter-4 - 在带有模型的控制器上插入功能在 codeigniter4 中不起作用。我该如何解决这个问题?
- localization - date-fns 格式未本地化数字
- go - 使用缓冲通道运行 goroutine,我在将元素输入通道之前得到了输出
- javascript - 在 NuxtJS Vue 中将类设置为原型
- python - 将 pyspark 数据框写入 Postgres 而不将列标记为非空
- javascript - 如何在 React 中从 json 访问 obj?
- csh - 如何使用 csh 创建名为 a001...a200 的文件
- aws-lambda - 使用 CDK 部署无法读取包含 Lambda 代码的临时 S3 存储桶
- android - 如何减少在循环或 if-else 语句中检查条件的时间
- html - 关于自定义引导进度条的问题