Python re.sub()覆盖我的字符串
Python中的Python re.sub()覆盖我的字符串,python,string,replace,Python,String,Replace,Python中的re.sub()函数面临一种奇怪的行为 在字符串中,我希望替换所有出现的事件,如 - list 1 - list 2 使用HTML代码,如 <li>list 1</li> <li>list 2</li> 令人惊讶的是,它又回来了 </li>ist 1 </li>ist 2 列表1 IST2 \g后面的文本将覆盖字符串的左侧部分 如果我尝试\gfoo,它会返回foot1 你们已经面对过这种行为了吗? 这
re.sub()
函数面临一种奇怪的行为
在字符串中,我希望替换所有出现的事件,如
- list 1
- list 2
使用HTML代码,如
<li>list 1</li>
<li>list 2</li>
令人惊讶的是,它又回来了
</li>ist 1
</li>ist 2
列表1
IST2
\g
后面的文本将覆盖字符串的左侧部分
如果我尝试\gfoo
,它会返回foot1
你们已经面对过这种行为了吗?
这里有我遗漏的东西吗
谢谢您的输入文件在行尾有回车符(
'\r'
)。因此,第一个输入行如下所示:
- list 1\r\n
由于\r
将光标移动到当前行的开头,并且\n
移动到下一行的开头,因此您可以打印该字符串而不必注意
替换后,您的行看起来像:
<li>list 1\r</li>\n
列表1\r \n
这会导致打印时,
显示在当前行的开头
您有两种可能的解决方案:
- 在输入时去除
\r
- 从匹配的字符类中排除
\r
第一个示例是使用open(fname,'rU')
打开文本文件
第二个例子是re.sub(“(-p[^\r\n]+)”,“\g ”,text)
既不能使用Python 2.7也不能使用Python 3.3进行复制。请附上SSCCE:您是否可能在先前的替换中替换了主角?在re.sub
之前的print语句显示什么?好的,似乎在变量“text”中有一些Windows换行符。删除re.sub()之前文本中的所有\r事件后,它将正常工作。我使用debian作为服务器,并使用BottalPy创建了一个小CRUD。我认为文本区域(HTML)中的换行符是由服务器而不是用户的操作系统来解释的?也有可能文件是在Windows平台上以文件模式'rb'
打开的。在这种情况下,文件模式'r'
可能会起作用。谢谢,确实是尾随\r导致了问题。
</li>ist 1
</li>ist 2
- list 1\r\n
<li>list 1\r</li>\n