来自
string= this is, not good "type of ,question" to ask, on stackoverflow
我想提取"type of , question"
子字符串,并将','
替换为' '
。
使用re.findall()
会产生" "
之间的字符列表,使用re.search
会产生类对象。
使用re.sub()
会替换所有','
,但我需要它们,除了在子字符串中用双引号引起来的那些。
任何人都可以帮助我解决这个问题。
提前谢谢!
答案 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)
另一种为您提供灵活性的方法是,您可以通过以下两个步骤来做到这一点:
找到引号中包含的所有匹配项,
在每次比赛中寻找并替换','
。
示例:
# 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")