我有一个包含&&
的字符串
我想替换左侧和右侧都有空格的所有&&
。
示例字符串:
x&& &&& && && x
期望输出:
x&& &&& and and x
我的代码:
import re
print re.sub(r'\B&&\B','and','x&& &&& && && x')
我的输出
x&& and& and and x
请建议我,如何阻止&&&
被and&
取代。
答案 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;
});
答案 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;。