检查字符串外部的正则表达式

2024-06-11 14:10:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Scrapy编写一个网络爬虫,结果得到一组url,比如:[虚拟url] *http://matrix.com/en/Zion

http://matrix.com/en/Machine_World

http://matrix.com/en/Matrix:Banner_guidelines

http://matrix.com/en/File:Link_Banner.jpg

http://matrix.com/wiki/en/index.php*

在scrapy的规则中,我想添加一个regex,它只允许“http://matrix.com/en/Machine_World”或“http://matrix.com/en/Zion”类型的url i、 e不允许URL包含集合“http://matrix.com/en/<;[a-zA-Z,\]>;”之外的任何内容。你知道吗

约束条件:

  • “/en/”后面的字符串可以是任意长度。所以我不能要求它只查找前10或20个字符。e、 g当我使用regex:[a-zA-Z,]{1,20}或[a-zA-Z,]{1}时,它仍然像http://matrix.com/en/Matrix:Banner_guidelines一样匹配url,因为它发现url的“http://matrix.com/en/Matrix”部分匹配成功。我希望它查看从“/en/”开始到URL结尾的字符串,然后应用此规则。 不幸的是,我无法提取字符串,也无法编写任何子例程。必须只使用正则表达式!你知道吗

Tags: 字符串comhttpurlworld规则machinematrix
2条回答

建议正则表达式工作的可复制证据:

grep("matrix.com\\/en\\/[a-zA-Z,_]+$", x, perl=TRUE, value=TRUE)
#[1] "http://matrix.com/en/Zion"         
#[2] "http://matrix.com/en/Machine_World"

数据

x <- c("http://matrix.com/en/Zion", "http://matrix.com/en/Machine_World", 
       "http://matrix.com/en/Matrix:Banner_guidelines",
       "http://matrix.com/en/File:Link_Banner.jpg",
       "http://matrix.com/wiki/en/index.php")

i.e urls that contain anything outside of the set "http://matrix.com/en/<[a-zA-Z,_]>" must not be allowed.

你试过在正则表达式中使用这个字符类吗?看起来你没有加下划线。你知道吗

试试看

[a-zA-Z,_]+

加号的意思是“一个或多个”——与{1,}相同,只是一个很好的速记:)

如果要排除带有.php或.jpg的项,可以在末尾添加$符号,如下所示:

[a-zA-Z,_]+$

$表示“行尾”,这意味着您的匹配序列必须运行到行尾。由于字符类中不包含句号,因此将排除这些选项

如果有用的话告诉我, 艾略特

相关问题 更多 >