首页 > 解决方案 > 在Java中提取不区分大小写的子字符串的正则表达式

问题描述

我正在尝试从 a 段落中提取 GRANT 编号。授权号通常是字母数字,带有大写字母,并且可以-介于两者之间,但它们都将出现而没有任何空格。

以下是一些赠款示例:

现在我什至不确定一个段落是否有授权,所以目前我依靠这个词grant出现在授权号之前。


示例

This research was supported by NIH/NHLBI Grant W9124A-18-0001(PI, Michael Brown)

我尝试使用以下正则表达式

(?i)grant [A-Z0-9-]*

但它并不完美,并且Grant w9124A-18-0001不应该匹配(小写w)。我该如何改进它?

标签: javaregex

解决方案


您可以使用以下表达式:

(?i)(?<=Grant\s)(?-i)[A-Z0-9-]+\b
  • (?i)不区分大小写。
  • (?<=Grant\s)积极的后视Grant后跟空格。
  • [A-Z0-9-]+匹配数字、字母字符和破折号-
  • (?-i)关闭不区分大小写。
  • \b词界。

你可以在这里现场试一试。

打开区分大小写,而不是禁用不区分,使用:

(?i)(?<=Grant\s)(?c)[A-Z0-9-]+\b

受 Tcl 支持


推荐阅读