替换"&&"用"和"在python中使用re.sub。

时间:2015-08-23 16:46:13

标签: python regex python-2.7

我有一个包含&&的字符串 我想替换左侧和右侧都有空格的所有&&

示例字符串

x&& &&&  && && x 

期望输出

x&& &&&  and and x


 我的代码

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

我的输出

x&& and&  and and x

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

3 个答案:

答案 0 :(得分:4)

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

and

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

<强>代码:

     WorkersService.all.query().$promise.then(function(data){
        $scope.workers = data;
     });

RegEx Demo

答案 1 :(得分:2)

您不需要正则表达式,只需split即可。即,根据空格拆分输入字符串,然后迭代列表中的每个项目,然后仅当项目等于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'

OR

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

答案 2 :(得分:1)

示例输入

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

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

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

这里正则表达式(?<=\s)&&(?=\s)表示&amp;&amp;将以空格(\ s)开头和之后。

(?&lt; = ...)

这是一个正面的背后断言,可以确保匹配的字符串前面有 ...

例如:(?&lt; = x)abc将在xabc

中找到匹配项

(适用?= ...)

这是前瞻断言,可确保匹配的字符串后跟 ...

例如:abc(?= xyz)将匹配&#39; abc&#39;只有当它跟着&#39; xyz&#39;。