如何使用正则表达式基于否定模式匹配删除特殊字符

How to remove a special character based on negative pattern matching using regular expression

我有一个类似于 hello \+ \\world \+ \\ this 4 \ is \Pattern\ 的示例字符串,我希望它类似于 hello + \world + this 234 is \Pattern

一种方法是 运行 为字符串中的每个字符循环,如果它是 \ 并且下一个字符是 NOT 一个单词,然后将其替换为 space。简单但低效的代码。必须有另一种使用正则表达式的方法。

我可以找到所有 \alphabet 使用 r'\\w+' 和任何单个 \ 后跟 space 作为 \\s+ 但这些不会 \\ \( \+ 考虑在内。这怎么能做到?

也许使用:

\(?![A-Za-z])\s*

并根据此在线替换为空字符串demo

  • \ - 反斜杠(转义);
  • (?![A-Za-z]) - 否定前瞻断言后面没有 alphachar;
  • \s* - 0+(贪婪)空白字符。

您可以使用前瞻:

s = r"hello \+ \\world \+ \\ this  4 \ is \pattern\'"

import re
s2 = re.sub(r'\*(?![a-zA-Z])', '', s)
print(s2)

输出:hello + \world + this 234 is \pattern'

正则表达式的工作原理:

\*          # match any number of \
(?![a-zA-Z]) # if not followed by a letter

试试这个正则表达式:

\(?=[\W\d]|$)

用空字符串替换所有匹配项

Click for Demo

Code

说明

  • \ - 匹配 \
  • (?=[\W\d]|$) - 正向前瞻以确保上面匹配的 \ 必须后跟数字或非单词,或者必须位于字符串的末尾。所有匹配的 \ 都将被替换为空字符串