如何使用正则表达式基于否定模式匹配删除特殊字符
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]|$)
用空字符串替换所有匹配项
说明
\
- 匹配 \
(?=[\W\d]|$)
- 正向前瞻以确保上面匹配的 \
必须后跟数字或非单词,或者必须位于字符串的末尾。所有匹配的 \
都将被替换为空字符串
我有一个类似于 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]|$)
用空字符串替换所有匹配项
说明
\
- 匹配\
(?=[\W\d]|$)
- 正向前瞻以确保上面匹配的\
必须后跟数字或非单词,或者必须位于字符串的末尾。所有匹配的\
都将被替换为空字符串