除特殊符号外,删除单词开头的标点符号

时间:2018-12-14 10:52:35

标签: python regex

问题:如何使用正则表达式删除单词开头的标点符号,但保留单词.NET

我使用了下一个正则表达式:

text = 'Must-have skills: -.Net programming experience; -2 years experience in C++.'
newtext = re.sub(r'<.*?>|&nbsp;', ' ', 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

2 个答案:

答案 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()从文本中删除匹配项。