gpt4 book ai didi

java - 编写确定匹配数并提取所需字符串的正则表达式

转载 作者:行者123 更新时间:2023-11-30 07:45:38 24 4
gpt4 key购买 nike

我正在尝试从字符串中提取一个数字,该字符串应包含一个数字、一个空白和一个

通常,该字符串应该类似于4 张票。 (或者也许是“钢坯 2”。)

换句话说,字符串应该包含 1 到 3 位数字、一个空格和某种单词或短语。我只关心数字,单词的值或它使用的语言完全不相关。

我的代码的另一部分需要这个数字。它作为字符串传递,因此无需担心将其转换为 int,但如果我需要使用标准习惯用法,无论如何我都可以这样做。

为了安全起见,我认为我的代码应该验证只有一个数字(不管数字中的位数)以防万一输入是“4 tickets billets 2”或类似的疯狂内容。

如何验证字符串中恰好有 1 个数字(最多 3 位数字),以便在有任何其他数量的数字(尤其是根本没有数字或多于一个数字)时发出警告?

如果我不知道该数字在字符串中的位置,我该如何提取该数字?

我从阅读的教程中学到了很多东西:

String needle = "\\d{1,}";
Pattern pattern = Pattern.compile(needle);
Matcher matcher = pattern.matcher(haystack);

while(matcher.find()) {
System.out.println("Found at: "+ matcher.start() + " - " + matcher.end());
}

这段代码告诉我模式是否匹配多次,但通过为每个匹配单独写一行来实现,我只想知道匹配的数量。

最佳答案

使用以下正则表达式在文本中准确找到一个数字:

[^0-9]*([0-9]+)[^0-9]*

解释:

[^0-9]*     match 0 or more non-digits at beginning of input
([0-9]+) match 1 or more digits, and capture them
[^0-9]* match 0 or more non-digits at end of input

然后您使用 matches() 来匹配整个输入。

捕获数字的值和位置可通过 group(1)start(1)end(1) 方法获得。

测试

public static void main(String[] args) {
test("foo tickets 456 ");
test("42");
test(" 1 A 3");
test("4 tickets");
test("billets 2");
}
public static void test(String haystack) {
System.out.println(haystack);
Matcher m = Pattern.compile("[^0-9]*([0-9]+)[^0-9]*").matcher(haystack);
if (m.matches()) {
System.out.println(" Needle was found in positions " + m.start(1) + " thru " + m.end(1));
System.out.println(" Number from haystack is " + m.group(1));
} else {
System.out.println(" Haystack doesn't have exactly 1 needle");
}
}

输出

foo  tickets 456 
Needle was found in positions 13 thru 16
Number from haystack is 456
42
Needle was found in positions 0 thru 2
Number from haystack is 42
1 A 3
Haystack doesn't have exactly 1 needle
4 tickets
Needle was found in positions 0 thru 1
Number from haystack is 4
billets 2
Needle was found in positions 8 thru 9
Number from haystack is 2

关于java - 编写确定匹配数并提取所需字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51567568/

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