strs = [
"I like to run head first into a wall (not)"
"klsjlsk klsjdkls ,m s,mdn,mnsd,m (123)"
"a b c d e f g h i (j?)"
]
我要删除“(不是),(123),(j?)”
为什么
re.sub(r' (\([*]\))$', '', strs(0))
不这样做,正确的方法是什么?
答案 0 :(得分:1)
请考虑以下内容:
import re
strs = [
"I like to run head first into a wall (not)",
"klsjlsk klsjdkls ,m s,mdn,mnsd,m (123)",
"a b c d e f g h i (j?)"
]
# space(\s)
# openbracket(\()
# anychar(.*)
# smallestpossiblematch(?)
# closebracket(\))
pattern = r'\s*\(.*?\)'
# list comprehension with new strings
new = [re.sub(pattern, '', strs[i]) for i in range(len(strs))]
答案 1 :(得分:1)
您正在使用捕获组(括号外)捕获括号内的所有内容。但是,由于您没有重用捕获的数据,因此没有必要。如果您只想删除所有括号和一行末尾的封闭文本(我的猜测是根据您提供的内容),
re.sub(r'\([^\)]*\)$', '', strs[0])
示例:https://regex101.com/r/FOTTfi/1
如果同样重要的是删除括号前的空格,只需在开始处使用\s
或\s+
。
您的行不通是因为[*]
没有按照您的想法行事。它正在寻找文字*
。如果要查找任意数量的字符,请改用.*
。
答案 2 :(得分:0)
这是您需要使用print re.sub(r'\([^)]*\)', '', strs[0])