在Python中解析文本的问题
我一直在试图做一个re.sub
来替换我的python字符串中的重复字符串,并且已经击中墙壁。在Python中解析文本的问题
我试图查找和替换字符串为" *. in *."
所有这些是文字,即不重复的空间,然后什么等等等等
我已经尝试了很多东西,这里是目前的一个在我的控制台:
message = re.sub(r"([\s][*][.][\s]in[\s][*][.])+", " *. in *.",message)
有人能以我的方式指出我的错误吗?
你的正则表达式是笨重的,但它的工作原理。问题是你与替换它完全一样的字符串:
>>> import re
>>> message = 'string I am trying to find and replace is " *. in *." All those are literal'
>>> re.sub(r"([\s][*][.][\s]in[\s][*][.])+", " *. in *.", message)
'string I am trying to find and replace is " *. in *." All those are literal'
>>> re.sub(r"([\s][*][.][\s]in[\s][*][.])+", "wot", message)
'string I am trying to find and replace is "wot" All those are literal'
看到了吗?有用!
你的正则表达式是“笨重”,因为你想要的只有两个神奇字符匹配字面上是*
和.
。尽管方括号的确可以消除它们的魔法属性,但通常的做法是用反斜线来避开它们。所有其他字符和顺序做不需要支架,所以你需要的是
re.sub(r"(\s\*\.\sin\s\*\.)+", "wot", message)
*我一直在尝试做一个re.sub来替换一个**重复的**字符串* - OP试图收缩几个重复的子字符串只发生一次。看到我对这个问题的评论。 OP正则表达式和解决方案正常工作。或者应该工作。 –
@WiktorStribiżew:我刚刚测试过重复出现的*。在* .'中,这仍然有效。一串文字重复被一个单独的“wot”替换,单个出现也是如此。那么OP应该添加更多的例子。 – usr2564301
感谢您的努力。我复制并粘贴了上面的几条建议,重复的字符串仍然没有缩小。当我使用“wot”替换时,字符串变成“wot in wot”。为了解决这个问题,我改变了战术,首先取代了“*”。与另一个字符串,然后缩小基本上由Wiktor和Rad建议的代码。 –
好了,你想*收缩*多“*。*中。”只有一个?请参阅http://ideone.com/wgEVsR。如果你启用了're.U'标志,'\ s'也会加速所有的Unicode空格。尝试在[\ s] [*] [。])+“,”*。in *。“中输入message = re.sub(r”([\ s] [*] [。] [\ s]), ,flags = re.U)' –
首先你应该逃避点:'[\。]' –
@Shionion:不,一个人不需要逃避角色类中的点。 –