首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中提取不区分大小写的子串的正则表达式

在Java中提取不区分大小写的子串的正则表达式
EN

Stack Overflow用户
提问于 2018-08-14 22:42:31
回答 3查看 3K关注 0票数 2

我正在尝试从a段中提取GRANT数字。奖助金数字通常是一个数字,由大写字母组成,中间可以有-,但它们都是不带空格的。

以下是一些拨款的例子:

  • W9124A-18-0001
  • 007-FY2018
  • W81XWH18PRMRPTTDA
  • 07-544

现在我甚至不确定一个段落是否会有拨款,所以目前我依赖于单词grant在拨款编号之前出现。

示例

代码语言:javascript
复制
This research was supported by NIH/NHLBI Grant W9124A-18-0001(PI, Michael Brown)

我尝试使用下面的正则表达式

代码语言:javascript
复制
(?i)grant [A-Z0-9-]*

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-14 22:49:58

您可以使用以下表达式:

代码语言:javascript
复制
(?i)(?<=Grant\s)(?-i)[A-Z0-9-]+\b

  • (?i) Case insensitive.
  • (?<=Grant\s)正向查找后跟whitespace.
  • [A-Z0-9-]+匹配数字、字母字符和破折号的单词,并关闭case -.
  • (?-i) insensitivity.
  • \b Grant

你可以在here现场试用一下。

使用以下命令打开区分大小写,而不是禁用不区分大小写:

代码语言:javascript
复制
(?i)(?<=Grant\s)(?c)[A-Z0-9-]+\b

only supported by Tcl

票数 7
EN

Stack Overflow用户

发布于 2018-08-14 23:12:49

在Grant之后,您需要关闭不区分大小写。

代码语言:javascript
复制
(?i)grant (?-i)[A-Z0-9-]*
票数 3
EN

Stack Overflow用户

发布于 2018-08-14 22:50:00

从根本上说,你不是在考虑案例。您的正则表达式目前只查找"Grant“,在"grant”上将失败。更糟糕的是,您的授权标识符也有大小写混合的情况,而您的正则表达式也没有对此进行检查。

解决这个问题的最简单方法是确保您的正则表达式确实支持这些值。这里不需要太花哨的东西;只需执行简单的匹配即可。

代码语言:javascript
复制
[Gg]rant [A-Za-z0-9\-]+

更复杂的匹配-例如与授予ID的连字符分隔部分相关的特定子组匹配-留给读者作为练习。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51844078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档