gpt4 book ai didi

Java正则表达式匹配字典范围的字符串

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:42:22 24 4
gpt4 key购买 nike

我翻遍了各种Java REGEX资料,都没有找到我要找的答案:

如何找到两个值(abcdef)之间的所有字符串?

所以如果我有以下字符串:

abc
acc
ace
amf
def
efg
khp
mlo

我希望得到以下内容,因为它们介于 abcdef 之间(包括):

abc 
acc
ace
amf
def

最佳答案

使用正则表达式(不推荐)

没有直接的表达方式。事实上,这几乎与确定给定数字是否在特定范围内相同。 (即提供一个匹配123-456范围内数字的正则表达式。)

不过,您可以使用相当复杂的正则表达式对其进行“编码”。我在这里描述的过程:

对于"abc""def"的具体例子,你可以这样写:

  • a 已关注
    • b 后跟 c-z,或者
    • c-z 后跟任意字符,或者
  • b-c 后跟任意两个字符,或者
  • d 后跟
    • a-d 后跟任意字符,或者
    • e 后跟
      • a-f.

代码如下:

String pattern = "a(b[c-z]|[c-z][a-z])|[bc][a-z][a-z]|d([a-d][a-z]|e[a-f])";

for (String s: "abc acc ace amf def efg khp mlo".split(" "))
System.out.println(s + (s.matches(pattern) ? " matches" : ""));

输出:

abc matches
acc matches
ace matches
amf matches
def matches
efg
khp
mlo



使用String.compareTo(推荐)

您应该考虑比较字符串:

"abc".compareTo(s) <= 0 && s.compareTo("def") <= 0

示例:

String lower = "abc", upper = "def";

for (String s: "abc acc ace amf def efg khp mlo".split(" ")) {
boolean match = lower.compareTo(s) <= 0 && s.compareTo(upper) <= 0;
System.out.println(s + (match ? " matches" : ""));
}

输出:

abc matches
acc matches
ace matches
amf matches
def matches
efg
khp
mlo

关于Java正则表达式匹配字典范围的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6493493/

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