替换位于其间的字符串

时间:2012-06-19 07:56:43

标签: python regex string

这是我的问题:在一个包含逗号的文本变量中,我尝试只删除两个字符串之间的逗号(实际上是[])。例如,使用以下字符串:

input =  "The sun shines, that's fine [not, for, everyone] and if it rains, it Will Be better."
output = "The sun shines, that's fine [not for everyone] and if it rains, it Will Be better."

我知道如何将.replace用于整个变量,但我不能将其用于部分变量。 在这个网站上有一些主题正在接近,但我没有设法利用它们来解决我自己的问题,例如:

4 个答案:

答案 0 :(得分:18)

import re
Variable = "The sun shines, that's fine [not, for, everyone] and if it rains, it Will Be better."
Variable1 = re.sub("\[[^]]*\]", lambda x:x.group(0).replace(',',''), Variable)

首先,您需要找到需要重写的字符串部分(使用re.sub执行此操作)。然后你重写那些部分。

函数var1 = re.sub("re", fun, var)表示:查找te变量var中符合"re"的所有子字符串;使用函数fun处理它们;返回结果;结果将保存到var1变量。

正则表达式“[[^]] *]”表示:查找以[开头的子字符串(重新\[),包含除]以外的所有内容({{1}在重新加入)并以[^]]*(重新])结束。

对于每个找到的事件,运行一个将此事件转换为新事件的函数。 功能是:

\]

这意味着:获取找到的字符串(lambda x: group(0).replace(',', '') ),将group(0)替换为','(换句话说,删除'')并返回结果。

答案 1 :(得分:3)

您可以使用这样的表达式来匹配它们(如果括号是平衡的):

,(?=[^][]*\])

使用类似:

re.sub(r",(?=[^][]*\])", "", str)

答案 2 :(得分:0)

这是一个非正则表达式方法。您可以使用[][/替换/]分隔符,然后在split分隔符上替换/。然后,需要处理拆分列表中的每个odd字符串以进行comma删除,这可以在列表解析中重建字符串时完成:

>>> Variable = "The sun shines, that's fine [not, for, everyone] and if it rains,
                it Will Be better."
>>> chunks = Variable.replace('[','[/').replace(']','/]').split('/')
>>> ''.join(sen.replace(',','') if i%2 else sen for i, sen in enumerate(chunks))
"The sun shines, that's fine [not for everyone] and if it rains, it Will Be 
 better."

答案 3 :(得分:-2)

如果您不想学习正则表达式(请参阅本页的其他回复),您可以使用partition命令。

sentence = "the quick, brown [fox, jumped , over] the lazy dog"
left, bracket, rest = sentence.partition("[")
block, bracket, right = rest.partition("]")

"块"现在是括号之间的字符串的一部分," left"是开放式支架的左边和右边的#34;是开幕式右侧的内容。

然后您可以使用以下内容恢复完整的句子:

new_sentence = left + "[" + block.replace(",","") + "]" + right
print new_sentence # the quick, brown [fox jumped over] the lazy dog

如果您有多个块,则可以将所有这些块放在for循环中,将partition命令应用于" right"在每一步。

或者你可以学习正则表达式!从长远来看,这是值得的。