使用正则表达式(python)对括号内的文本进行脱色

时间:2019-06-21 17:01:52

标签: python regex

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))

不这样做,正确的方法是什么?

3 个答案:

答案 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])

的正则表达式