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

时间:2008-09-30 08:23:05

标签: python regex encoding

问题在于:

split=re.compile('\\W*')

这个正则表达式在处理常规单词时工作正常,但有时我需要表达式包含käyttäj&aml;auml;之类的单词。

我应该在正则表达式中添加哪些内容以包含&;个字符?

4 个答案:

答案 0 :(得分:6)

我会将实体视为一个单元(因为它们也可以包含数字字符代码),从而产生以下正则表达式:

(\w|&(#(x[0-9a-fA-F]+|[0-9]+)|[a-z]+);)+

匹配

  • 字词(包括“_”)或
  • 包含的HTML实体
    • 字符“&”,
      • 字符“#”,
        • 字符“x”后跟至少一个十六进制数字,或
        • 至少一个十进制数字,或
      • 至少一个字母(=命名实体),
    • 分号
  • 至少一次。

/编辑:感谢ΤΖΩΤΖΙΟΥ指出错误。

答案 1 :(得分:5)

你可能想要反过来解决问题,即找到没有空格的所有字符:

[^ \t\n]*

或者您想添加额外的字符:

[a-zA-Z0-9&;]*

如果您想匹配HTML实体,您应该尝试类似:

(\w+|&\w+;)*

答案 2 :(得分:2)

你应该创建一个包含额外字符的字符类。例如:

split=re.compile('[\w&;]+')

这应该可以解决问题。供您参考

  • \w(小写'w')匹配单词字符(字母数字)
  • \W(大写W)是一个否定的字符类(意味着它匹配任何非字母数字字符)
  • *匹配0次或多次,+匹配一次或多次,因此*将匹配任何内容(即使没有字符)。

答案 3 :(得分:-1)

看起来这样做了诀窍:

分裂= re.compile( '(\\ W +&安培; \\ W +;)*')

感谢您的建议。他们中的大多数在Reggy上工作得很好,但我不太明白他们为什么用re.compile失败了。