Python re.sub()覆盖我的字符串

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 你们已经面对过这种行为了吗? 这

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

    你们已经面对过这种行为了吗? 这里有我遗漏的东西吗


    谢谢

    您的输入文件在行尾有回车符(
    '\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