正则表达式匹配字符串开头的一些大写字符

时间:2013-08-04 15:40:56

标签: java regex

任何人都可以推荐符合以下规则的正则表达式:

  • 大写或空格

我想要匹配的字符串看起来像这样

LONDON 10 Downing St, London

或者

NEW YORK 2859 Broadway, New York, NY 10025

当我传入每一行时,我希望能够匹配LONDON和NEW YORK这两个词。

P.S。我在Java中这样做

3 个答案:

答案 0 :(得分:5)

  • 字符串的开头:^
  • 大写字母:\p{Lu}
  • 空间: 
  • 结合两者:[\p{Lu} ]
  • 前面任意数量的令牌:*
  • 断言匹配在单词结尾处结束(要求Java 7可靠地运行):\b

因此,你的正则表达式是

^[\p{Lu} ]*\b

不要忘记将反斜杠加倍以符合Java的字符串转义规则:

在Java 7中:

Pattern regex = Pattern.compile("^[\\p{Lu} ]*\\b", Pattern.UNICODE_CHARACTER_CLASS);

在Java 6及以下版本中:

Pattern regex = Pattern.compile("^[\\p{Lu} ]*(?<=\p{Lu})");

答案 1 :(得分:1)

您可以使用此模式:

^[A-Z ]+

这将匹配字符串开头的一个或多个大写拉丁字母或空格。

您可以轻松修改此内容以避免捕获尾随空格:

^[A-Z ]*[A-Z]

答案 2 :(得分:-2)

使用此:

^\u+( \u+)*

它匹配许多大写字符,可选地后跟一组(单个空格,更多大写字符)。这将避免总是以空格结束。