我正在尝试从a段落中提取GRANT号。授予号通常是字母数字,带有大写字母,并且之间可以有-
,但是它们全都没有空格。
以下是授予的一些示例:
W9124A-18-0001
007-FY2018
W81XWH18PRMRPTTDA
07-544
现在我甚至不确定段落是否会被授予,因此目前我依靠的是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
)。我该如何改善?
答案 0 :(得分:5)
您可以使用以下表达式:
(?i)(?<=Grant\s)(?-i)[A-Z0-9-]+\b
(?i)
不区分大小写。(?<=Grant\s)
对Grant
进行正向查找,后跟空格。[A-Z0-9-]+
匹配数字,字母字符和破折号-
。(?-i)
关闭不区分大小写。\b
字边界。您可以在线体验here。
通过以下方式打开区分大小写,而不是禁用不区分大小写:
(?i)(?<=Grant\s)(?c)[A-Z0-9-]+\b
答案 1 :(得分:3)
您需要在Grant之后关闭不区分大小写的内容。
(?i)grant (?-i)[A-Z0-9-]*
答案 2 :(得分:0)
从根本上讲,您并没有考虑到案例。您的正则表达式仅查找“ grant”,而对“ Grant”将失败。更糟糕的是,您的授权标识符也有大小写混合的情况,并且您的正则表达式也不会检查 。
解决此问题的最简单方法是确保您的正则表达式实际上支持这些值。您在这里不需要任何花哨的东西。只需执行简单的匹配即可。
[Gg]rant [A-Za-z0-9\-]+
专家匹配(例如,与授予ID的连字符消除部分相关的特定子组匹配)作为练习供读者阅读。