保持+和的正确正则表达式语法是什么.从字符串中删除不匹配的字符时



我正在寻找一个正则表达式来删除非ASCII字符,但保留字符串中的任何['_','-','+', '.']

以下适用于除['+', '.']以外的所有

import re
text = 'ValidCharactersForPassword123._-+.AndRemoveNonAscii-áéíóú'
re.sub(r'[^A-Za-z0-9_-]+','',text)

返回"ValidCharactersForPassword123_-AndRemoveNonAsci-",其中['+', '.']已被移除,这是正确的。

我希望得到像'ValidCharactersForPassword123_-+.AndRemoveNonAscii-这样的结果

我试过逃离+和。但我尝试过的都失败了。

re.sub(r'[^A-Za-z0-9_-+]+','',text)
re.sub(r'[^A-Za-z0-9_-\+]+','',text)
re.sub(r'[^A-Za-z0-9_-\+]+','',text)

返回错误,如

error: bad character range _-\ at position 11

保留+和的正确语法是什么。从字符串中删除不匹配的字符时?

只需确保将所有字符添加到您想要从删除中腾出的负类中。请注意,您感兴趣的唯一需要在类中转义的字符是-。但是,正如您已经在做的那样,我们可以将它移到类的末尾,以避免不得不逃离它。

# -*- coding: utf-8 -*-
import re
text = 'ValidCharactersForPassword123._-+.AndRemoveNonAscii-áéíóú'
output = re.sub(r'[^A-Za-z0-9_+.-]+','',text)
print(output)
ValidCharactersForPassword123._-+.AndRemoveNonAscii-

你可以这样做

当你在字符类的endstart使用-时,你不需要转义它,否则你需要转义它

[^A-Za-z0-9_+.-]+

代码

import re
text = 'ValidCharactersForPassword123._-+.AndRemoveNonAscii-áéíóú'
re.sub(r'[^A-Za-z0-9_+.-]+','',text)

演示

只是不要将转义的+.(或任何其他re字符(放在-之后,因为这可能会导致问题:

In [3]: import re
...: text = 'ValidCharactersForPassword123._-+.AndRemoveNonAscii-áéíóú'
...: re.sub(r'[^A-Za-z0-9+._-]+','',text)
Out[3]: 'ValidCharactersForPassword123._-+.AndRemoveNonAscii-'

这是因为您的原始代码将"[...._-+]"解释为_+范围内的任何字符。

您也可以按以下方式退出-

In [1]: import re
...: text = 'ValidCharactersForPassword123._-+.AndRemoveNonAscii-áéíóú'
...: re.sub(r'[^A-Za-z0-9._-+]+','',text)
Out[1]: 'ValidCharactersForPassword123._-+.AndRemoveNonAscii-'

最新更新