这是我的问题:在一个包含逗号的文本变量中,我尝试只删除两个字符串之间的逗号(实际上是[
和]
)。例如,使用以下字符串:
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
用于整个变量,但我不能将其用于部分变量。
在这个网站上有一些主题正在接近,但我没有设法利用它们来解决我自己的问题,例如:
答案 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"在每一步。
或者你可以学习正则表达式!从长远来看,这是值得的。