java
  • regex
  • string
  • 2012-11-27 42 views 0 likes 
    0

    所以,我一直在用Java开发的,使用方法“匹配()” ..如:匹配()匹配必须在Java中使用大写开头的单词

    Str1 = 'Jane'; 
    Str1.matches("[A-Z][a-zA-Z]*"); 
    

    找到一个字符串是否从首都开始,随后是任意数量的大/小写字母。除了当我尝试匹配未知量的单词时,我似乎可以找出所有配置。例如,如果我想确认一个字符串是由只有大写字母开头的字母和空格组成的。我想可以做

    Str2 = 'Jane Marie Doe'; 
    Str2.matches("[A-Z][a-zA-Z\\s]*"); 
    

    在资本后跟任意数量的空格,资金和较低的情况下,但不会强制执行,每一个空间都必须跟着一个大写规则。我是否需要标记化(不确定这是否合适)或使用空格作为分隔符分割字符串,然后评估每个单词?或者有什么方法可以将它输入匹配方法,比如([A-Z] [a-zA-Z] \\ s)*其中星号表示括号中整个条目的任意数量?虽然当我输入这个内容时,我想这不会在概念上起作用,因为最后一个单词在后面没有空格。也许([A-Z] [a-zA-Z] \\ s?)*会起作用?但是,事实并非如此。有什么会有?

    我确实看到有一些其他问题解决了这个问题,但我似乎无法找到一个明确的工作答案。

    +0

    '([AZ] [A-ZA-Z] * \ S *)*'我看来,像它” d工作 –

    +0

    @PhillipSchmidt,如果单词之间总是只有一个空格。 – jrajav

    回答

    6

    试试这个:

    ([A-Z][a-zA-Z]*\s*)+ 
    

    单大写字母,后跟任意数量的其他字母,后跟任意数量的空格,重复任意次数。

    根据您的情况,您可能还想添加法律标点符号,如连字符和东西。

    所以,像这样:

    ([A-Z][a-zA-Z\-\']*\s*)* 
    
    1

    这应该工作:

    "([A-Z][a-zA-Z]*\\s*)*" 
    

    我只是改变\\s?\\s*允许的字与字之间不止一个空格匹配。

    +1

    不会工作。这匹配一个大写字母,加上另一个字母,再加上任意数量的空格 –

    +0

    @PhillipSchmidt糟糕。固定。 –

    +0

    现在它匹配我的评论,但:P –

    1

    试试下面的正则表达式:

    "[A-Z][a-zA-Z]*(\\s+[A-Z][a-zA-Z]*)*$" 
    
    +0

    将无法​​正常工作。它匹配2个字母的大写单词,后跟任何其他数量的2个字母单词。这将匹配一个充满2个字母单词的文档。 –

    +0

    @PhillipSchmidt:感谢您发现错字。 – NPE

    +0

    还是不太明白。该正则表达式可以匹配整个文档,前提是它不包含任何标点符号。 –

    0

    这将工作

    ^([A-Z][a-zA-Z]*\s*)+$ 
    
    相关问题