Java-搜索超过1个大写字母的单词
只需要您在Java中搜索任务方面的帮助。 我需要从一个文件中读一行,列出所有超过1个大写字母的单词 例如,如果这条线是:这个宇宙中有七颗行星 结果应该是:七和宇宙 我可以通过将行拆分为单词来阅读,但有些人无法使用正确的正则表达式来搜索这些单词 下面是我使用的一个小示例,但它返回false,尽管我认为它应该返回true System.out.println(“ThiS.matches”([A-Z]{2,}”) 任何人都可以看看这个,并提出实现我的结果的方法吗? 谢谢你的帮助 谢谢Java-搜索超过1个大写字母的单词,java,regex,search,Java,Regex,Search,只需要您在Java中搜索任务方面的帮助。 我需要从一个文件中读一行,列出所有超过1个大写字母的单词 例如,如果这条线是:这个宇宙中有七颗行星 结果应该是:七和宇宙 我可以通过将行拆分为单词来阅读,但有些人无法使用正确的正则表达式来搜索这些单词 下面是我使用的一个小示例,但它返回false,尽管我认为它应该返回true System.out.println(“ThiS.matches”([A-Z]{2,}”) 任何人都可以看看这个,并提出实现我的结果的方法吗? 谢谢你的帮助 谢谢 AJ您列出的正则
AJ您列出的正则表达式不起作用,因为它将搜索由2个或更多大写字母组成的连续序列 我认为你需要做的是写一个表达式,允许两边都有小写字母
我不记得确切的语法(我要检查一下),但是类似于
*[A-Z].[A-Z].
的东西将确保您有两个大写字母您列出的正则表达式不起作用,因为它将搜索两个或更多大写字母的连续序列
我认为你需要做的是写一个表达式,允许两边都有小写字母
我不记得确切的语法(我要检查一下),但是类似于
*[A-Z].[A-Z].
的东西将确保您有两个大写字母[A-Z]{2,}
表示两个或更多连续的大写字母。您可以使用[A-Z].[A-Z]
,这将允许任何其他字符出现在两个大写字母之间
或者,您也不需要为此使用正则表达式。如果愿意,您可以在字符串中的每个字符上迭代并使用
字符。isUpperCase
并计算匹配字符的数量。[A-Z]{2,}
表示两个或更多连续的大写字母。您可以使用[A-Z].[A-Z]
,这将允许任何其他字符出现在两个大写字母之间
或者,您也不需要为此使用正则表达式。如果愿意,您可以在字符串中的每个字符上迭代并使用
字符。isUpperCase
并计算匹配字符的数量。也许[a-z]*[a-z][a-z]*[a-z][a-z]*
可以工作。。事实上,用{..}
计数不允许两个字母之间有字符。也许[a-z]*[a-z][a-z]*[a-z][a-z]*
可以工作。。事实上,使用{..}
进行计数时,两个字母之间不允许使用字符
\b(?:[a-z]*[A-Z]){2}[a-z]*\b
将匹配至少包含两个大写字母的单词
如果要允许包含ASCII以外字母的单词,请使用
\b(?:\p{Ll}*\p{Lu}){2}\p{Ll}*\b
当然,在Java字符串中,需要转义(加倍)反斜杠
所以你得到:
Pattern regex = Pattern.compile("\\b(?:\\p{Ll}*\\p{Lu}){2}\\p{Ll}*\\b");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
// matched text: regexMatcher.group()
// match start: regexMatcher.start()
// match end: regexMatcher.end()
}
将匹配至少包含两个大写字母的单词
如果要允许包含ASCII以外字母的单词,请使用
\b(?:\p{Ll}*\p{Lu}){2}\p{Ll}*\b
当然,在Java字符串中,需要转义(加倍)反斜杠
所以你得到:
Pattern regex = Pattern.compile("\\b(?:\\p{Ll}*\\p{Lu}){2}\\p{Ll}*\\b");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
// matched text: regexMatcher.group()
// match start: regexMatcher.start()
// match end: regexMatcher.end()
}
您当前的正则表达式只匹配两个或更多大写字母的序列,而不是分布在整个单词中的倍数。因此,您可以匹配
这个
和这个
,但不能像您所发现的那样匹配这个
你需要寻找一个大写字母,可能是一些小写字母,然后是另一个大写字母。或者在正则表达式中:[A-Z]\w*?[A-Z]
如果要搜索整个字符串而不需要首先拆分它,则可以在任意一端包含其他单词字符,并让表达式捕获:(\w*?[A-Z]\w*?[A-Z]\w*)
还要注意的是,我们使用的是不情愿的量词,以便它们在前两个实例中尽早停止匹配,并在末尾使用正常(贪婪)量词来拾取单词的其余部分。阅读有关各种量词的更多信息。您当前的正则表达式只匹配两个或更多大写字母的序列,而不是散布在整个单词中的倍数。因此,您可以匹配
这个
和这个
,但不能像您所发现的那样匹配这个
你需要寻找一个大写字母,可能是一些小写字母,然后是另一个大写字母。或者在正则表达式中:[A-Z]\w*?[A-Z]
如果要搜索整个字符串而不需要首先拆分它,则可以在任意一端包含其他单词字符,并让表达式捕获:(\w*?[A-Z]\w*?[A-Z]\w*)
还要注意的是,我们使用的是不情愿的量词,以便它们在前两个实例中尽早停止匹配,并在末尾使用正常(贪婪)量词来拾取单词的其余部分。阅读更多有关各种量词的信息
印刷品
SeVen
UniverSe
我对正则表达式很讨厌,所以可能有一个更简单的方法。但是,这种方法很容易理解:从单词的开头开始,匹配0个或更多字符,然后匹配一个大写字符,然后匹配0个或更多字符,然后匹配另一个大写字符,然后匹配0个或更多字符
印刷品
SeVen
UniverSe
我对正则表达式很讨厌,所以可能有一个更简单的方法。但是,这种方法很容易理解:从单词的开头开始,匹配0个或更多字符,然后匹配一个大写字符,然后匹配0个或更多字符,然后匹配另一个大写字符,然后匹配0个或更多字符 我使用这个正则表达式
/[A-Z].[A-Z]+/
我使用这个正则表达式/[A-Z].[A-Z]+/
你可以使用这个正则表达式:
“七”。匹配(“[A-Z].[A-Z][A-zA-Z]”),正确
“SeveNEight”。匹配(“[A-Z].[A-Z][A-zA-Z]”),正确
“seVeneight”。匹配(“[A-Z].[A-Z][A-zA-Z]”//false您可以使用此正则表达式: