问题:如何使用正则表达式删除单词开头的标点符号,但保留单词.NET
?
我使用了下一个正则表达式:
text = 'Must-have skills: -.Net programming experience; -2 years experience in C++.'
newtext = re.sub(r'<.*?>| ', ' ', text)
re.sub(r'[!,.:;—](?= |$)', ' ', newtext)
我得到了下一个结果:
'Must-have skills -.Net programming experience -2 years experience in C++ '
所需结果:
'Must-have skills .Net programming experience 2 years experience in C++ '
PS :
我需要删除单词前的所有标点符号。无需仅删除单词.Net
中的点。例如。 -2
转换为2
,但-.Net
转换为.Net
答案 0 :(得分:1)
您可以使用
import re
text = 'Must-have skills: -.Net programming experience; -2 years experience in C++.'
text = re.sub(r'[!,.:;—](?= |$)', ' ', text)
print(re.sub(r'(?i)(?:(?!\.net\b|\b-\b)[^\w\s])+(?=[^\w\s]*\b)', '', text))
# => Must-have skills .Net programming experience 2 years experience in C++
请参见Python demo。
详细信息
(?i)
-启用不区分大小写的模式(?:(?!\.net\b|\b-\b)[^\w\s])+
-任何不出现任何序列的标点符号([^\w\s]
),如果出现1个或更多,则越多越好。
\.net\b
-.net
整个词|
-或\b-\b
-用字符char括起来的连字符(?=[^\w\s]*\b)
-一个正向的超前查询,需要0+个标点符号,其后紧接当前位置的右侧是单词边界位置。答案 1 :(得分:0)
您可以使用下面的正则表达式来查找Net后面没有的所有点。
[!,.:;-](?!Net|$|\W)
然后使用Regex.Replace()从文本中删除匹配项。