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

Ank*_*kur -2 java regex

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

  • 大写或空格

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

LONDON 10 Downing St, London

或这个

NEW YORK 2859 Broadway, New York, NY 10025

当我通过每一行时,我希望能够匹配伦敦和纽约这两个词.

PS我在Java中这样做

Tim*_*ker 5

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

因此,你的正则表达式是

^[\p{Lu} ]*\b
Run Code Online (Sandbox Code Playgroud)

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

在Java 7中:

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

在Java 6及以下版本中:

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

  • @arshajii:[它只匹配ASCII字边界](http://stackoverflow.com/q/4304928/20670). (2认同)
  • 如果您没有编写Java 7中的/,请使用`(?<=\p {Lu})`而不是`\ b`.这是一个[正面的背后断言](http://www.regular-expressions.info/lookaround.html),确保前一个字符是大写字母. (2认同)
  • Tim,可能即使在Java 7中你也需要`(?u)`或`Pattern.UNICODE_CHARACTER_CLASS`来使`\ b`与非ASCII一起工作.我要检查以确保.我需要查看2 - 3年前的邮件列表讨论,看看解决方案对于`\ b`这个问题是什么. (2认同)