【问题标题】:What regex can I use to match only letters, numbers, and one space between each word?我可以使用什么正则表达式来匹配每个单词之间的字母、数字和一个空格?
【发布时间】:2009-10-27 12:55:05
【问题描述】:

如何创建一个只匹配字母和数字的正则表达式,并且每个单词之间有一个一个空格?

好例子:

惊人的 你好世界 我今年500岁

不好的例子:

你好世界 我已经500岁了。 我是查克·诺里斯

【问题讨论】:

  • 你想匹配一行包含多个这样的单词还是一次只匹配一个单词?您能否通过一些示例详细说明您想要匹配的内容是什么?
  • 为什么要求禁止多个空格?它真的那么重要吗,或者您可以在应用正则表达式之前自动将所有多个空格转换为单个空格吗?或者,这只是一个学术练习?

标签: regex


【解决方案1】:

大多数正则表达式实现都支持命名字符类:

^[[:alnum:]]+( [[:alnum:]]+)*$

您可能会很聪明,尽管不太清楚,并将其简化为:

^([[:alnum:]]+ ?)*$

仅供参考,第二个允许在字符串末尾使用虚假空格字符。如果您不想坚持使用第一个正则表达式。

正如其他海报所说,如果[[:alnum:]] 不适合您,那么您可以使用[A-Za-z0-9]

【讨论】:

  • 如果你加“?”我会给你一票。在开始处处理行/字符串开头的单个空格(和 ^$ 锚点)。其他一切似乎都很好。
  • 抱歉,刚刚看到您的编辑。以下正则表达式运行良好:^([A-Za-z0-9]+ ?)*$ 非常感谢!
【解决方案2】:
([a-zA-Z0-9]+ ?)+?

【讨论】:

  • 而行首的空格是如何处理的? :-)
【解决方案3】:
^([a-zA-Z0-9]+\s?)*$

它的作品

【讨论】:

  • 即使结尾有尾随空格也匹配。
【解决方案4】:
^[a-zA-Z]+([\s][a-zA-Z]+)*$

【讨论】:

    【解决方案5】:
    (?:[a-zA-Z0-9]+[ ])+[a-zA-Z0-9]+
    

    如果我对您的理解正确,上述正则表达式应该可以工作。 请看下面的截图:

    screenshot http://img136.imageshack.us/img136/6871/screenshotkiki056.png

    【讨论】:

    • 你用什么工具测试正则表达式(见截图)?
    【解决方案6】:

    这将匹配一个单词

    '[a-zA-Z0-9]+\ ?'
    

    【讨论】:

    • 太好了,现在让它处理一行:-)
    • 不,它会匹配 一些 个单词。仅包含 (ascii) 范围 a-z 和 A-Z 的那些。单词café 将不匹配。它还可以匹配仅由数字组成的字符串,例如 01012009,我不会称之为单词。
    • 这不能回答问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    相关资源
    最近更新 更多