寻找包含字母数字 + "&" 和 ";" 的正则表达式
这是一个问题:
split=re.compile('\\W*')
这个正则表达式在处理普通单词时效果很好,但有时候我需要这个表达式能够包含像 käyttäj&aml;auml;
这样的单词。
我应该在正则表达式中添加什么,才能包含 &
和 ;
这两个字符呢?
4 个回答
2
你应该创建一个字符类,里面包含额外的字符。比如:
split=re.compile('[\w&;]+')
这样就可以了。顺便告诉你一些信息:
\w
(小写的'w')匹配字母和数字这些字符。\W
(大写的'W')是一个反向字符类,也就是说它匹配任何不是字母或数字的字符。*
表示可以匹配0次或多次,而+
表示至少要匹配1次,所以*
可以匹配任何东西(即使没有字符也可以)。
6
我会把这些实体当作一个整体来看待(因为它们也可以包含数字字符代码),所以可以用下面这个正则表达式:
(\w|&(#(x[0-9a-fA-F]+|[0-9]+)|[a-z]+);)+
这个表达式可以匹配:
- 一个单词字符(包括“
_
”),或者 - 一个HTML实体,这个实体包含:
- 字符“
&
”, - 字符“
#
”, - 字符“
x
”后面跟着至少一个十六进制数字,或者 - 至少一个十进制数字,或者
- 至少一个字母(也就是命名实体),
- 一个分号
- 至少出现一次。
/编辑:感谢ΤΖΩΤΖΙΟΥ指出了一个错误。
5
你可能想要反过来解决这个问题,也就是说,找出所有没有空格的字符:
[^ \t\n]*
或者你想要添加额外的字符:
[a-zA-Z0-9&;]*
如果你想要匹配HTML实体,可以试试这样的做法:
(\w+|&\w+;)*