我正在尝试将'.net'
中的'i like .net'
替换为.NET
。预期输出:'i like .NET'.
'c++'
'i like c++'
Cpp
'i like Cpp'.
。预期输出:import re
regex_match = re.compile(r'\bnet\b')
print(regex_match.sub('NET', 'I like .net'))
# output I like .NET Which works but I need boundary match also.
regex_match = re.compile(r'\b.net\b')
print(regex_match.sub('NET', 'I like .net'))
# output I like .net
regex_match = re.compile(r'\b\.net\b')
print(regex_match.sub('NET', 'I like .net'))
# output I like .net
regex_match = re.compile(r'\b' + re.escape('.net') + '\b')
print(regex_match.sub('NET', 'I like .net'))
# output I like .net
regex_match = re.compile(r'\b' + re.escape('.net') + '\b')
print(regex_match.sub('NET', 'I like \.net'))
# output I like \.net
print(re.sub(r'\b' + re.escape('.net') + '\b', '.NET', 'I like .net'))
# output I like .net
regex_match = re.compile(r'\b' + re.escape('.net') + '\b')
print(regex_match.sub('NET', re.escape('I like .net')))
# output I\ like\ \.net
有更多特殊字符的情况,例如'c ++'
regex_match = re.compile(r'\b' + re.escape('c++') + '\b')
print(regex_match.sub('cpp', 'I like c++'))
# output `I like c++` expected `I like cpp`
更新:
ComponentName thisWidget = new ComponentName( getContext(), <ProviderClass> );
AppWidgetManager.getInstance( getContext() ).updateAppWidget( thisWidget, rempoteViews );
我在regex replace上经历了很多stackoverflow问题。在任何地方它建议逃跑'。',我试过,你可以看到上面。仍然没有用。非常感谢任何帮助。
答案 0 :(得分:5)
请勿在点之前放置\b
(字边界),因为点不是单词字符。
您可以使用:
>>> regex_match = re.compile(r'\.net\b')
>>> print(regex_match.sub('.NET', 'I like .net'))
I like .NET
修改强>
根据您的评论,您可以使用此正则表达式:
>>> print(re.sub(r'(^|\s)\.net(?=\s|$)', r'\1.NET', 'I like .net'))
I like .NET
>>> print(re.sub(r'(^|\s)\.net(?=\s|$)', r'\1.NET', 'I like.net'))
I like.net
答案 1 :(得分:2)
\b
之前的.
在.
之前需要单词char。 \b\.
与.
中的ASP.NET
匹配,但不会与In .NET
中的import re
regex_match = re.compile(r'(?<!\w){}(?!\w)'.format(re.escape('.net')))
print(regex_match.sub('NET', 'I like .net, not my.net.'))
# => I like NET, not my.net.
匹配。
如果你想匹配整个单词而不管搜索单词开头/结尾的字符,最好的办法是使用lookarounds:
net
请参阅Python demo。如果您使用.net
代替(?<!\w)
(参见another Python demo),它仍将保持不变。
这里,(?!\w)
将在搜索词之前需要非单词char或字符串的开头,而{{1}}将在搜索词之后立即需要非单词char或字符串结尾。