问题:如何使用正则表达式删除单词开头的标点符号但保留单词 .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++ '
附注:
我需要删除单词前面的所有标点符号。无需仅删除单词 .Net
中的点。例如。 -2
转换为 2
,但 -.Net
转换为 .Net
最佳答案
您可以使用
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
- 用单词字符括起来的连字符
-
-
(?=[^\w\s]*\b)
- 正向前瞻,需要 0 个以上标点符号,后跟紧邻当前位置右侧的单词边界位置。
关于python - 删除单词开头的标点符号(特殊符号除外),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53778294/