我有一个这样的字符串:
a = "\"java jobs in delhi\" delhi"
我想用“”取代德里。但只有德里在双引号之外。因此,输出应如下所示:
"\"java jobs in delhi\""
字符串是一个示例字符串。子字符串不一定是“delhi”。要替换的子字符串可以出现在输入字符串中的任何位置。字符串中引用和不引用部分的顺序和数量不固定
.replace()
替换了两个德里子串。我不能使用rstrip
因为它不一定出现在字符串的末尾。我怎么能这样做?
答案 0 :(得分:3)
使用re.sub
>>> a = "\"java jobs in delhi\" delhi"
>>> re.sub(r'\bdelhi\b(?=(?:"[^"]*"|[^"])*$)', r'', a)
'"java jobs in delhi" '
>>> re.sub(r'\bdelhi\b(?=(?:"[^"]*"|[^"])*$)', r'', a).strip()
'"java jobs in delhi"'
或强>
>>> re.sub(r'("[^"]*")|delhi', lambda m: m.group(1) if m.group(1) else "", a)
'"java jobs in delhi" '
>>> re.sub(r'("[^"]*")|delhi', lambda m: m.group(1) if m.group(1) else "", a).strip()
'"java jobs in delhi"'
答案 1 :(得分:0)
作为一般方法,您可以使用re.split
和列表理解:
>>> a = "\"java jobs in delhi\" delhi \"another text\" and this"
>>> sp=re.split(r'(\"[^"]*?\")',a)
>>> ''.join([i.replace('dehli','') if '"' in i else i for i in sp])
'"java jobs in delhi" delhi "another text" and this'
re.split()
功能根据"
包围的子字符串拆分文字:
['', '"java jobs in delhi"', ' delhi ', '"another text"', ' and this']
然后你可以替换没有被2个双引号包围的dehli
个单词!
答案 2 :(得分:0)
这是另一种选择。这是删除任何未加引号的文本的通用解决方案:
def only_quoted_text(text):
output = []
in_quotes=False
for letter in a:
if letter == '"':
in_quotes = not in_quotes
output.append(letter)
elif in_quotes:
output.append(letter)
return "".join(output)
a = "list of \"java jobs in delhi\" delhi and \" python jobs in mumbai \" mumbai"
print only_quoted_text(a)
输出结果为:
"java jobs in delhi"" python jobs in mumbai "
如果缺少最终报价,它也会显示文字。