用于检查集合外部字符串的正则表达式

时间:2015-07-12 01:24:36

标签: python regex r scrapy

我正在使用Scrapy编写一个Web爬虫,因此我获得了一组URL,如:[Dummy 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的规则中,我想添加一个正则表达式,只允许使用“http://matrix.com/en/Machine_World”或“http://matrix.com/en/Zion”类型的网址 即包含“http://matrix.com/en/< [a-zA-Z,_]>”之外的任何内容的网址绝不允许。

约束:

  • “/ en /”之后的字符串可以是任意长度。所以我不能要求它只查看前10或20个字符。例如,当我使用正则表达式时:[a-zA-Z,] {1,20}或[a-zA-Z,] {1,}它仍匹配{{3}之类的网址}它找到“http://matrix.com/en/Matrix:Banner_guidelines”网址的一部分成功匹配。我希望它看看在“/ en /”之后直到URL结尾的字符串,然后应用此规则。 不幸的是我无法提取该字符串n编写任何类型的子例程。它必须仅使用正则表达式完成!

2 个答案:

答案 0 :(得分:1)

  

即包含集合之外的任何内容的网址" http://matrix.com/en/< [a-zA-Z,_]>"绝不允许。

您是否尝试在正则表达式中使用此字符类?看起来你不包括下划线。

尝试

[a-zA-Z,_]+

加号表示"一个或多个" - 这与{1,}只是一个很好的速记相同:)

如果您想要排除.php或.jpg的项目,请随意添加$符号,如下所示:

[a-zA-Z,_]+$

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

如果有效,请告诉我, 埃利奥特

答案 1 :(得分:0)

建议的正则表达式有效的可重复证据:

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")