gpt4 book ai didi

java - 用于查找字符串中 1 到 3 个字符的正则表达式

转载 作者:行者123 更新时间:2023-12-01 06:22:00 25 4
gpt4 key购买 nike

我正在尝试编写一个正则表达式,如果 [A-Za-z] 出现在 1 和 3 之间,它应该返回 true,但我无法执行此操作

public static void main(String[] args) {
String regex = "(?:([A-Za-z]*){3}).*";
String regex1 = "(?=((([A-Za-z]){1}){1,3})).*";

Pattern pattern = Pattern.compile(regex);
System.out.println(pattern.matcher("AD1CDD").find());
}

注意:对于连续的3个字符,我可以写它,但我想要实现的是整个字符串的出现次数应该在1到3之间。如果有 4 个字符,则应返回 false。我已经使用前瞻来实现这一点

最佳答案

如果我正确理解你的问题,你想检查一下

  • 字符串中包含 [a-zA-Z] 范围内的 1 到 3 个字符
  • 还有其他字符可以任意频繁出现吗?

首先,仅计算字符而不使用正则表达式会更有效,因为这不是常规语言问题,而是一个简单的计数问题。使用 for 循环解决此问题没有任何问题(除了 Python 和 R 等解释器可能相当慢)。

尽管如此,您可以(ab-)使用扩展正则表达式:

^([^A-Za-z]*[A-Za-z]){1,3}[^A-Za-z]*$

一旦您也为“其他”角色建模,这相当简单。这就是定义模式时应该做的:对所有接受的字符串(即整个“语言”)进行建模,而不仅仅是那些您想要查找的字符。

或者,您可以“查找所有”([A-Za-z]) 匹配项,并查看结果的长度。如果您还需要实际的字符,这可能会更方便。

for 循环看起来像这样:

public static boolean containsOneToThreeAlphabetic(String str) {
int matched = 0;
for(int i=0; i<str.length; i++) {
char c = str.charAt(i);
if ((c>='A' && c<='Z') || (c>='a' && c<='z')) matched++;
}
return matched >=1 && matched <= 3;
}

这是简单、可读、可扩展且高效的(在编译语言中)。您还可以添加 if (matched>=4) return false;(或 break)以提前停止。

关于java - 用于查找字符串中 1 到 3 个字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51578511/

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