首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串上的Regex匹配(DOI)

字符串上的Regex匹配(DOI)
EN

Stack Overflow用户
提问于 2022-08-01 15:24:10
回答 1查看 79关注 0票数 0

嗨,我很难理解为什么我的Regex不起作用。

我有URL,上面有DOI,就像这样:

代码语言:javascript
复制
https://link.springer.com/10.1007/s00737-021-01116-5
https://journals.sagepub.com/doi/pdf/10.1177/1078390319877228
https://journals.sagepub.com/doi/pdf/10.1177/1078390319877228
https://onlinelibrary.wiley.com/doi/10.1111/jocn.13435
https://journals.sagepub.com/doi/pdf/10.1177/1062860613484171
https://onlinelibrary.wiley.com/resolve/openurl?genre=article&title=Natural+Resources+Forum&issn=0165-0203&volume=26&date=2002&issue=1&spage=3
https://dx.doi.org/10.1108/14664100110397304?nols=y
https://onlinelibrary.wiley.com/doi/10.1111/jocn.15833
https://www.tandfonline.com/doi/pdf/10.1080/03768350802090592?needAccess=true

我用的是这个Regex,但是它总是返回空的?

代码语言:javascript
复制
print(re.findall(r'/^10.\d{4,9}/[-._;()/:A-Z0-9]+$/i', 'https://dx.doi.org/10.1108/02652320410549638?nols=y'))

我哪里出错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-01 15:54:53

看起来,您来自另一种编程语言,它有regex文字的概念,这些字面值是用正斜杠分隔的,并且在结束斜杠后面有修饰符(因此是/i)。

在Python中没有这样的东西,这些斜杠和修饰符被视为文字字符。对于像i这样的标志,您可以使用findall的可选flags参数。

其次,^将与输入字符串的开头相匹配,但很明显,作为输入的URL不以10开头,所以必须这样做。相反,您可以要求10必须跟随一个单词中断..。也就是说,它之前不应该有字母数字字符(或下划线)。

类似地,$将匹配输入字符串的末尾,但是您有URL参数,比如?nols=y,所以您感兴趣的部分在输入结束之前不会继续。所以这也必须去做。

这个点在regex中有一个特殊的含义,但是您显然想要匹配一个文字点,所以它应该转义。

最后,字母数字字符可以与\w匹配,这也匹配小写字母和大写拉丁字母,因此您可以稍微缩短字符类,并且不需要任何标志,比如i (re.I)。

这使我们有:

代码语言:javascript
复制
print(re.findall(r'\b10\.\d{4,9}/[-.;()/:\w]+', 
                'https://dx.doi.org/10.1108/02652320410549638?nols=y'))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73196058

复制
相关文章

相似问题

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