【问题标题】:Java Regex to extract a word from given StringJava 正则表达式从给定的字符串中提取一个单词
【发布时间】:2017-12-04 14:36:50
【问题描述】:

我需要从给定的字符串中提取一个单词。在这种情况下,字符串可能以不同的方式出现。例如:

"签名指的是测试 id 69043 abcd。签名指的是测试 id 1001"

"签名指的是测试id

69043 定义。签名是指测试ID 1001"

"签名指的是测试

id 69043。”

另外,测试 ID 可能并不总是小写。如果我可以忽略它是小写还是大写,那就更好了。它可能是测试 ID,也可能是测试 ID

我暂时写了这个'测试ID([0-9]+)'

我想从这些给定的字符串中提取“测试 ID 号”。有时它可以在字符串中有多个“测试 ID 号”。有时字符串有多行,因为它出现在一个段落中。

【问题讨论】:

标签: java regex string


【解决方案1】:

您可以在此处使用正式的 Java 模式匹配器,使用以下不区分大小写的模式:

(?i)test\s+id\s+(\d+)

考虑以下代码sn-p:

String input = "The Signature refers to test id 69043 abcd. ";
input += "The Signature refers to test id 1001";
String pattern = "(?i)test\\s+id\\s+(\\d+)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);

while (m.find()) {
   System.out.println("Found value: " + m.group(1) );
}

这会正确输出两个 id:

Found value: 69043
Found value: 1001

Demo

【讨论】:

  • 如果文本和数字之间有新行怎么办
  • @MadushanChathuranga 我刚刚在演示中添加了一堆换行符,它仍然有效。唯一的问题是,如果你想匹配 across 换行符,但这里似乎不需要。
  • 我想跨行匹配。在某些情况下,值可能会被拆分为太新的行,它可能不是“测试 ID”,也可能总是“测试 ID”、“测试 ID”。谢谢
  • @MadushanChathuranga 我使模式不区分大小写,现在即使拆分为多行也可以匹配目标模式。
  • \s 允许不同类型的空白字符,包括EOL
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 2016-02-24
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
相关资源
最近更新 更多