Python正则表达式中定位符匹配问题

2 投票
2 回答
2373 浏览
提问于 2025-04-16 03:02

我有一个正则表达式,我觉得它应该能匹配任何不是字母、数字、'!'、'?' 或 '.' 的字符。

re.compile('[^A-z ?!.]')

但是,在 iPython 中我得到了一个奇怪的结果:

In [21]: re.sub(a, ' ', 'Hey !$%^&*.#$%^&.')
Out[21]: 'Hey !  ^  .   ^ .'

当我在正则表达式中对 '.' 进行转义时,结果也是一样的。

我该怎么做才能把插入符号(^)也从字符串中去掉呢?

2 个回答

0

在ASCII码中,大写字母和小写字母之间有一个插入符号。你需要用这个表达式 [^a-zA-Z ?!\.] 来表示。

3

你的正则表达式有个错误。注意字母 az 的大小写是很重要的。A-z 包含了 ASCII 值在 65(A)到 122(Z)之间的所有字符,这里面还包括了插入符号(ASCII 码 94)。

试试这个:

re.compile('[^A-Za-z ?!.]')

举个例子:

import re
regex = re.compile('[^A-Za-z ?!.]')
result = regex.sub(' ', 'Hey !$%^&*.#$%^&.')
print result

结果:

Hey !     .     .

撰写回答