Python 正则表达式还是用通配符替换()?
我有一个字符串:Python 正则表达式还是用通配符替换()?,python,string,replace,Python,String,Replace,我有一个字符串: a(45:45)b(65:40)ccc(blah$#) 我想删除()中的所有内容,包括(),如下所示: abccc 我本来打算尝试使用re,但我想也许可以使用通配符和replace()。如果可能,我想避免使用re。您需要re才能使用通配符。我的意思是,您可以手动解析字符串,但这似乎是在浪费时间 import re s = 'a (45:45) b (65:40) ccc (blah$#)' print re.sub('\s?\(.*?\)', '', s).strip() #
a(45:45)b(65:40)ccc(blah$#)
我想删除()
中的所有内容,包括()
,如下所示:
abccc
我本来打算尝试使用
re
,但我想也许可以使用通配符和replace()
。如果可能,我想避免使用re
。您需要re
才能使用通配符。我的意思是,您可以手动解析字符串,但这似乎是在浪费时间
import re
s = 'a (45:45) b (65:40) ccc (blah$#)'
print re.sub('\s?\(.*?\)', '', s).strip() # 'a b ccc'
您需要
re
才能使用通配符。我的意思是,您可以手动解析字符串,但这似乎是在浪费时间
import re
s = 'a (45:45) b (65:40) ccc (blah$#)'
print re.sub('\s?\(.*?\)', '', s).strip() # 'a b ccc'
您是对的:在解析字符串时,正则表达式不应该总是第一个想到的工具,特别是当可能涉及嵌套结构时 计算括号并据此采取行动相对容易:
def filter_parens(sentence):
result, level = [], 0
for c in sentence:
if c == '(':
level += 1
elif c == ')':
level = max(0, level-1)
elif level == 0:
result.append(c)
return ''.join(result)
通过一点想象力,您可以将其扩展到elminate括号或空白:
def filter_parens(sentence):
result, level, whitespace = [], 0, False
for c in sentence:
if c == '(':
level += 1
continue
if c == ')':
level = max(0, level-1)
continue
if level:
continue
if c.isspace() and not whitespace:
whitespace = True
result.append(c)
continue
if c.isspace():
continue
whitespace = False
result.append(c)
return ''.join(result)
您是对的:在解析字符串时,正则表达式不应该总是第一个想到的工具,特别是当可能涉及嵌套结构时 计算括号并据此采取行动相对容易:
def filter_parens(sentence):
result, level = [], 0
for c in sentence:
if c == '(':
level += 1
elif c == ')':
level = max(0, level-1)
elif level == 0:
result.append(c)
return ''.join(result)
通过一点想象力,您可以将其扩展到elminate括号或空白:
def filter_parens(sentence):
result, level, whitespace = [], 0, False
for c in sentence:
if c == '(':
level += 1
continue
if c == ')':
level = max(0, level-1)
continue
if level:
continue
if c.isspace() and not whitespace:
whitespace = True
result.append(c)
continue
if c.isspace():
continue
whitespace = False
result.append(c)
return ''.join(result)
您想用空格做什么?您想用空格做什么?有点像样,但当
s
以parens中的一个组开头时将失败。@hop删除了第一个匹配项,以便字符串可以以一个组开头。输出可能以空格开头,但我现在没有时间来解决这个问题。虽然还算不错,但当s
以parens中的一个组开头时将失败。@hop删除了第一个匹配项,以便字符串可以以一个组开头。输出可能以一个空格开始,但我现在没有时间解决这个问题。如果涉及嵌套结构,这是一个很好的解决方案。但是,值得一提的是,在一行正则表达式就足够的情况下,这是过分的。好吧,这里的其他答案并不能激发人们对正则表达式解决方案的信心。此外,OP要求它。如果涉及嵌套结构,这是一个很好的解决方案。但是,值得一提的是,在一行正则表达式就足够的情况下,这是过分的。好吧,这里的其他答案并不能激发人们对正则表达式解决方案的信心。同时,OP也要求这样做。