Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式还是用通配符替换()?_Python_String_Replace - Fatal编程技术网

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也要求这样做。