Python 正则表达式困难

Python 正则表达式困难,python,regex,Python,Regex,这就是我要提取的链接: 这就是我目前拥有的 .+\/article-details\/.+\-.+\-.+\-.+\-.+\-.+$ 然而,问题是它在“/article details/”部分后提取任意数量的单词和连字符,而不是用连字符替换上面空格的6个单词的标题。所以它会接受一个糟糕的结果 http://www.hrmagazine.co.uk/article-details/finance-sector-dominates-working-families-benchmark-test

这就是我要提取的链接:

这就是我目前拥有的

.+\/article-details\/.+\-.+\-.+\-.+\-.+\-.+$
然而,问题是它在“/article details/”部分后提取任意数量的单词和连字符,而不是用连字符替换上面空格的6个单词的标题。所以它会接受一个糟糕的结果

http://www.hrmagazine.co.uk/article-details/finance-sector-dominates-working-families-benchmark-test
当我需要它只接受这种格式的链接

http://www.hrmagazine.co.uk/article-details/one-two-three-four-five-six
这类网站的正确正则表达式是什么?我在Scrapy/Spyder中使用的当前提取器如下

rules = (Rule(LinkExtractor(allow=['.+\/article-details\/.+\-.+\-.+\-.+\-.+\-.+$']), callback='parse_item', follow=True),)

正则表达式中的每个
+
都可以匹配任意数量的字符,包括连字符。因此,您的整个正则表达式只需要至少5个连字符,而不是精确的计数。使用
[^-]+
仅匹配非连字符


请注意,正则表达式中的这些反斜杠都没有完成任何操作——在任何情况下,下面的字符都不需要转义。即使是这样,您也需要将反斜杠加倍,或者使用原始字符串
r'whatever'
,以便反斜杠由
re
模块解释,而不是由Python的字符串文字解析规则解释。

尝试将
替换为类似
[a-z]
<代码>也将匹配连字符,这就是为什么它会匹配无限数量的单词:

.+\/article-details\/[a-z]+\-[a-z]+\-[a-z]+\-[a-z]+\-[a-z]+\-[a-z]+$

如果您需要匹配数字之类的内容,请将它们也添加到括号中(
[a-z0-9]
等)。

尝试
///a[count(tokenize(tokenize(substring after(@href,“article details/”,-”))=6]/@href
以提取包含5个连字符的链接引用,该语句引用到问题的地方?这看起来不是正则表达式的格式……您用“XPath”标记了您的问题。这是XPathAh。哎呀。我现在把它改成正则表达式标签。从什么中提取出来?所以。。。那么我应该使用什么样的正则表达式呢?