python - 删除单词开头的标点符号(特殊符号除外)

标签 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++ '

附注:

我需要删除单词前面的所有标点符号。无需仅删除单词 .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/

相关文章:

c++ - GCC 和 MSVC 之间 std::regex_replace 行为的差异

JavaScript 正则表达式不工作

java - 使用正则表达式分割数字和表达式

Python:获取数据框中多个数组的逐元素平均值

python - .transform ('first' ) 是做什么的?

python - 类型注释但跳过 auto_attribs 类中的类属性

python - 如何在Python中从FTP下载带时间戳的文件?

python - 根据 pandas 数据框中的日期时间选择数据

python - 使用正则表达式在同一行中查找多个匹配项

用于 Unicode 或特殊字符的 Java 正则表达式