【问题标题】:python re.sub regexpython re.sub 正则表达式
【发布时间】:2012-08-09 19:41:36
【问题描述】:

Python 不断返回一个带有损坏字符的字符串。

蟒蛇

test = re.sub('handle(.*?)', '<verse osisID="lol">\1</verse>', 'handle a bunch of random text here.')
print test

我想要什么

<verse osisID="lol">a bunch of random text here.</verse>

我得到了什么

<verse osisID="lol">*broken character*</verse>a bunch of random text here.

【问题讨论】:

    标签: python regex


    【解决方案1】:

    您应该转义 \ 字符或使用 r'' 原始字符串:

    >>> re.sub('handle(.*?)', r'<verse osisID="lol">\1</verse>', 'handle a bunch of random text here.')
    '<verse osisID="lol"></verse> a bunch of random text here.'
    

    如果没有 r'' 原始字符串文字,反斜杠将被解释为转义码。您也可以将反斜杠加倍:

    >>> '\1'
    '\x01'
    >>> '\\1'
    '\\1'
    >>> r'\1'
    '\\1'
    >>> print r'\1'
    \1
    

    请注意,您只替换了 handle 那里的单词,.*? 模式至少匹配 0 个字符。删除问号,它将与您的预期输出匹配:

    >>> re.sub('handle(.*)', r'<verse osisID="lol">\1</verse>', 'handle a bunch of random text here.')
    '<verse osisID="lol"> a bunch of random text here.</verse>'
    

    【讨论】:

    • 你是一个美丽的人:)
    • 您可能希望匹配handle 之后的空格,但也要匹配下一个单词之前的空格,因为这将阻止...&gt; a br... 您可以使用handle *(.*) 执行此操作,假设您只有空格(不是其他空格)
    • @AndrewCox:我会使用\s* 来匹配那里的空白;为什么只限制空格?
    【解决方案2】:

    以下代码在python 3.6下测试

    import re 
    
    test = 'a bunch of random text here.'
    resp = re.sub(r'(.*)',r'<verse osisID="lol">\1</verse>',test)
    print (resp)
    
    <verse osisID="lol">a bunch of random text here.</verse>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多