【问题标题】:How to check unicode string to be letters, spaces and dashes only如何检查 unicode 字符串是否仅为字母、空格和破折号
【发布时间】:2012-02-03 11:15:40
【问题描述】:

我已经阅读了一个很好的 unicode 字符串解决方案here,但我需要检查整个字符串是否为字母、空格或破折号,我想不出任何解决方案。该示例没有按我的意愿工作。

name = u"Василий Соловьев-Седой"
r = re.compile(r'^([\s\-^\W\d_]+)$', re.U)
r.match(name) -> None

【问题讨论】:

  • 请准确定义“字母”、“空格”和“破折号”的含义。
  • 字母 - 任何 unicode 字母,空格 - 空格 :),破折号 - “-”符号
  • 我认为他的意思是 [a-zA-Z[UNICODE_LETTERS] -]*,这里的问题是 [UNICODE_LETTERS] 对吗?
  • @Eregrith,没有。要仅检查字符串中的 unicode 字母,r = re.compile(r'[^\W\d_]', re.U) 就足够了。它适用于字符串

标签: python regex


【解决方案1】:
r = re.compile(r'^(?:[^\W\d_]|[\s-])+$', re.U)

[^\W\d_] 匹配任何字母(通过匹配除数字和下划线之外的任何字母数字字符)。

[\s-] 当然匹配空格和破折号。

【讨论】:

  • 您是否在字符串 u"Василий Соловьев-Седой" 上对此进行了测试?结果没有。
  • @Tim 在研究这个我找到了你的另一个答案stackoverflow.com/questions/1716609/… 你能解释一下区别吗?是 re.U 允许单词令牌 \W 与 \p unicode 令牌一样吗?
  • 我的错误。我在错误的字符串上测试正则表达式。 @Tim 您的解决方案非常完美。谢谢。
  • @DavidHall:在某种程度上,是的。 Python 不直接支持 Unicode 属性,但 \w 快捷方式可识别 Unicode(如果您使用 re.U)。
【解决方案2】:

如果您只想检查:

name = u"Василий Соловьев-Седой";
name = name.replace("-","").replace(" ",""); 
name.isalpha()

【讨论】:

    猜你喜欢
    • 2012-06-12
    • 2014-08-03
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2010-09-10
    • 1970-01-01
    相关资源
    最近更新 更多