正则表达式不替换以"."开头的单词.或以"+"结尾,如".NET"或"C++"

Vik*_*ngh 1 python regex

我想,以取代'.net''i like .net'.NET.预期产量:'i like .NET'.

同样'c++''i like c++'Cpp.预期产量:'i like Cpp'.

有更多特殊字符的情况,如'c ++'

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
Run Code Online (Sandbox Code Playgroud)

更新:

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`
Run Code Online (Sandbox Code Playgroud)

我在regex replace上经历了很多stackoverflow问题.在任何地方它建议逃跑'.',我试过,你可以看到上面.仍然没有用.任何帮助深表感谢.

anu*_*ava 5

不要\b在dot之前放置(单词边界),因为dot不是单词字符.

您可以使用:

>>> regex_match = re.compile(r'\.net\b')
>>> print(regex_match.sub('.NET', 'I like .net'))
I like .NET
Run Code Online (Sandbox Code Playgroud)

编辑:

根据您的评论,您可以使用此正则表达式:

>>> 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
Run Code Online (Sandbox Code Playgroud)