【问题标题】:Replace "&&" with "and" using re.sub in python.在 python 中使用 re.sub 将 "&&" 替换为 "and"。
【发布时间】:2015-11-17 02:15:12
【问题描述】:

我有一个包含&&的字符串。
我想替换左右两边都有SPACE的所有&&

示例字符串

x&& &&&  && && x 

期望的输出

x&& &&&  and and x


我的代码

import re
print re.sub(r'\B&&\B','and','x&& &&&  && && x')

我的输出

x&& and&  and and x

请建议我,如何防止&&&and& 取代。

【问题讨论】:

标签: python regex python-2.7


【解决方案1】:

样本输入

s = "x&& &&&  && && x"

你可以使用正则表达式的lookbehind和lookhead断言

>>> print( re.sub(r"(?<=\s)&&(?=\s)", 'and',s))
x&& &&&   and   and  x

这里的正则表达式(?&lt;=\s)&amp;&amp;(?=\s)的意思是,&&前后都会有空格(\s)。

(?

这是一个肯定的后向断言,它确保匹配的字符串前面有 ...

例如:(?

(?=...)

这是一个 lookahead assertion,它确保匹配的字符串后面跟着 ...

例如:abc (?=xyz) 将匹配 'abc' 仅当它后跟 'xyz'。

【讨论】:

    【解决方案2】:

    您不需要正则表达式,只需 split 即可。即,根据空格拆分您的输入字符串,然后遍历列表中的每个项目,然后使其仅在项目等于&amp;&amp; 时返回and,否则返回特定项目。最后用空格加入返回的列表。

    >>> s = 'x&& &&&  && && x'
    >>> l = []
    >>> for i in s.split():
        if i == '&&':
            l.append('and')
        else:
            l.append(i)
    
    
    >>> ' '.join(l)
    'x&& &&& and and x'
    

    >>> ' '.join(['and' if i == '&&' else i for i in s.split()])
    'x&& &&& and and x'
    

    【讨论】:

    • x&amp;&amp; &amp;&amp;&amp;&lt;space&gt;&lt;space&gt;and and x-Desired Output x&amp;&amp; &amp;&amp;&amp;&lt;space&gt;and and x - 你的输出 你的答案不考虑多个空格。
    【解决方案3】:

    您可以使用这个环视正则表达式进行搜索:

    (?<= )&&(?= )
    

    并替换为and

    代码:

    p = re.compile(ur'(?<= )&&(?= )', re.IGNORECASE)
    test_str = u"x&& &&& && && x"
    
    result = re.sub(p, "and", test_str)
    

    RegEx Demo

    【讨论】:

    • 感谢 anubhava,它对我很有效。能否请您多分享一下这实际上是如何工作的。这对我有很大帮助。谢谢..
    • 是的,当然。 (?&lt;= ) 是一个积极的后视,确保&amp;&amp; 前面有一个空格。 (?= ) 是一个正向前瞻,可确保 &amp;&amp; 后跟一个空格。
    • 这是非常有用的知识!关于正则表达式...非常感谢。
    猜你喜欢
    • 2013-02-03
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 2017-08-07
    • 1970-01-01
    • 2013-04-26
    相关资源
    最近更新 更多