首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java中的复群正则表达式

Java中的复群正则表达式
EN

Stack Overflow用户
提问于 2017-03-30 13:39:18
回答 1查看 60关注 0票数 0

我开发了regex模式来解析科学文章中的书目。我们使用AMA引文方式,对于期刊引文,可以如下所示:

代码语言:javascript
运行
复制
"Nielsen MK, Neergaard MA, Jensen AB, Bro F, Guldin MB. Psychological distress, health, and socio-economic factors in caregivers of terminally ill patients: a nationwide population-based cohort study. Support Care Cancer. 2016; 24(7): 3057-3067."

或没有发行编号:

代码语言:javascript
运行
复制
"Nielsen MK, Neergaard MA, Jensen AB, Bro F, Guldin MB. Psychological distress, health, and socio-economic factors in caregivers of terminally ill patients: a nationwide population-based cohort study. Support Care Cancer. 2016; 24: 3057-3067."

或者只有第一页(电子号码)。

代码语言:javascript
运行
复制
"Nielsen MK, Neergaard MA, Jensen AB, Bro F, Guldin MB. Psychological distress, health, and socio-economic factors in caregivers of terminally ill patients: a nationwide population-based cohort study. Support Care Cancer. 2016; 24(7): 3057."

或者仅仅使用卷号(如果在打印之前):

代码语言:javascript
运行
复制
"Nielsen MK, Neergaard MA, Jensen AB, Bro F, Guldin MB. Psychological distress, health, and socio-economic factors in caregivers of terminally ill patients: a nationwide population-based cohort study. Support Care Cancer. 2016; 24."

我的模式匹配所有这些情况,并对所有数据进行分组(因为有Java,所以可以用两个斜杠转义):

代码语言:javascript
运行
复制
(.*?)\\.(.*?)\\.(.*?)(?<year>\\d+)\\s*?;?\\s*?(?:(?<volume>\\d+))?(?:\\((?<issue>\\d+)\\))?\\s*?(?::\\s*?(?<fpage>\\d+|[A-Za-z]+\\d+))?(?:[\\-\\–](?<lpage>\\d+))?\\.

问题是作者总是在第一页和最后一页之间加空格。我想也许这个模式也可以改变来匹配这个?

代码语言:javascript
运行
复制
"Nielsen MK, Neergaard MA, Jensen AB, Bro F, Guldin MB. Psychological distress, health, and socio-economic factors in caregivers of terminally ill patients: a nationwide population-based cohort study. Support Care Cancer. 2016; 24(7): 3057 - 3067."

这里是一个示例,可以看到该模式与此不正确地匹配。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-30 13:59:00

正确的判据是

代码语言:javascript
运行
复制
(.*?)\.(.*?)\.(.*?)(?<year>\d+)\s*?;?\s*?(?:(?<volume>\d+))?(?:\((?<issue>\d+)\))?\s*?(?::\s*?(?<fpage>\d+|[A-Za-z]+\d+))?(?:[ ]*[\-|\–][ ]*(?<lpage>\d+))?\.

这个https://regex101.com/r/RAdNgb/2解决了您的问题。请检查一下。

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

https://stackoverflow.com/questions/43119616

复制
相关文章

相似问题

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