-2

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

  • 大写或空格

我要匹配的字符串如下所示

LONDON 10 Downing St, London

或这个

NEW YORK 2859 Broadway, New York, NY 10025

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

PS我正在用Java做这个

4

3 回答 3

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})");
于 2013-08-04T15:43:28.590 回答
1

您可以使用此模式:

^[A-Z ]+

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

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

^[A-Z ]*[A-Z]
于 2013-08-04T15:42:35.430 回答
-2

用这个:

^\u+( \u+)*

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

于 2013-08-04T15:45:12.500 回答