gpt4 book ai didi

java - 大写单词和字符 java 匹配

转载 作者:太空宇宙 更新时间:2023-11-04 08:05:02 25 4
gpt4 key购买 nike

我无法使用简单的正则表达式,现在我有以下 java 代码

String regex = "^([^A-Za-z]*?[A-Z][A-Za-z]*?)+.?";
String string = "AQUA, CETEARYL ALCOHOL, CETYL ESTERS, BEHENTRIMONIUM CHLORIDE, CETRIMONIUM CHLORIDE, AMODIMETHICONE, TRIDECETH-12, PARFUM, METHYLPARABEN, HEXYL CINNAMAL, LINALOOL, BENZYL SALICYLATE, LIMONENE, LAMINARIA DIGITATA, CHAMOMILLA RECUTITA , ANICOZANTHOS FLAVIDUS, SODIUM BENZ0ATE, PHENOXYETHANOL, ETHYLPARABEN, BUTYLPARABEN, PROPYLPARABEN, P0LYS0RBATE 20, CI 19140, CI 14700.";
System.out.println(string.matches(regex));

问题是执行永远不会结束。请仅使用我的正则表达式来看看我是如何失败的。我需要的对我来说听起来很简单: - 可以是任何文本。 - 本文中的所有单词均应大写。 - 如果有单个字符,它们也应该是大写的。 -(数字、逗号……)之间的任何内容都应始终匹配。请参阅上面的复杂示例。简单就是:

Test, Test, Test = trueTest, test, Test = falseTest, 7-Test Test, Test = trueTest, 7-Test test, Test = falsena = falseNA = trueN/A = truePHENOXYETHANOL, P0LYS0RBATE 20, CI 19140, CI 14700. = true

非常感谢!!!

最佳答案

这似乎适用于您提供的所有输入:

"^((^|[^A-Za-z]+)[A-Z][A-Za-z]*)*[^A-Za-z]*$"

我不确定您的 validator 是如何工作的,但是通过在两端添加 ^$ 符号来强制匹配完整字符串并没有什么坏处。

你的正则表达式永远不会终止,因为你使用了太多的*(匹配零个或多个)组,这使得状态空间爆炸。请注意我如何在 [^A-Za-z] 组上使用 +,这强制它在匹配组之间匹配至少一个非字母。这将匹配数量保持在合理的范围内。但是,由于我的匹配一个完整的字符串(以 ^ 开头并以 $ 结尾),因此它只能找到一个匹配项。

编辑:

如果您不想匹配空字符串,请将倒数第二个 * 更改为 +:

"^((^|[^A-Za-z]+)[A-Z][A-Za-z]*)+[^A-Za-z]*$"

关于java - 大写单词和字符 java 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12215025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com