正则表达式查找子字符串并替换字符并更新整个字符串

时间:2018-11-20 16:20:26

标签: python regex

来自

string= this is, not good "type of ,question" to ask, on stackoverflow

我想提取"type of , question"子字符串,并将','替换为' '

使用re.findall()会产生" "之间的字符列表,使用re.search会产生类对象。

使用re.sub()会替换所有',',但我需要它们,除了在子字符串中用双引号引起来的那些。

任何人都可以帮助我解决这个问题。

提前谢谢!

5 个答案:

答案 0 :(得分:4)

使用正则表达式捕获组:

import re
s= 'this is, not good "type of ,question" to ask, on stackoverflow'
re.sub(r'(".*?),(.*?")', r'\1\2', s)

输出:

'this is, not good "type of question" to ask, on stackoverflow'

说明:正则表达式中的(stuff)代表捕获组,\1\2分别替换字符串引用部分中,字符之前和之后的部分。请注意,这也适用于单个字符串中的多个引号。

答案 1 :(得分:2)

另一种为您提供灵活性的方法是,您可以通过以下两个步骤来做到这一点:

  1. 找到引号中包含的所有匹配项,

  2. 在每次比赛中寻找并替换','

示例:

# define a pattern that gets you everything inside a double quote
pat = re.compile(r'"[^"]+"')

# re.sub the quote pattern and replace the , in each of those matches.
string = pat.sub(lambda x: x.group(0).replace(',',''), string)

# 'this is, not good "type of question" to ask, on stackoverflow'

这种方法的灵活性是,它使您可以根据需要替换任意数量的',',并且一旦找到所有双引号模式,就可以执行其他更改。

答案 2 :(得分:1)

split()replace()的组合怎么样? :

s = 'this is, not good "type of ,question" to ask, on stackoverflow'

splitted = s.split('"')
print(s.replace(splitted[1], splitted[1].replace(',', '')))

# this is, not good "type of question" to ask, on stackoverflow

注意:在这种情况下,此方法有效,但在双引号外的双引号内具有完全相同的字符串的情况下,则不起作用。

答案 3 :(得分:1)

如何?

b=""" "hello, howdy". sample text, text then comes "Another, double, quotes" """

for str_match in re.findall(r"\".*?\"",b):
    b = re.sub(str_match,re.sub(r","," ",str_match),b)

print(b)

输出:“ hello howdy”。示例文本,然后文本带有“另一个双引号”'

答案 4 :(得分:0)

我不确定这是否满足您的所有要求,但是在您提供的模板上,以下内容将返回您要查找的内容。

result = re.sub('("(?:[^"])*),((?:[^"])*")', r"\1 \2")