寻找包含字母数字 + "&" 和 ";" 的正则表达式

1 投票
4 回答
485 浏览
提问于 2025-04-11 09:27

这是一个问题:

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+;)*

撰写回答