gpt4 book ai didi

python - 为什么我写的正则表达式不能正常工作?

转载 作者:行者123 更新时间:2023-12-01 19:33:55 25 4
gpt4 key购买 nike

pattern = '(ns:m\.[^ ]+ )|(ns:g\.[^ ]+ )'
query = "PREFIX ns: <http://rdf.freebase.com/ns/>\nSELECT DISTINCT ?x\nWHERE {\nFILTER (?x != ns:m.0pz91)\nFILTER (!isLiteral(?x) OR lang(?x) = '' OR langMatches(lang(?x), 'en'))\nns:m.0pz91 ns:film.producer.film ?x .\n?x ns:film.film.genre ?c .\n?c ns:film.film_genre.films_in_this_genre ns:g.11b5lzm6b0 . \n}"
entities = re.findall(pattern, query)

我想做的是查找查询中的所有 freebase 实体,即'ns:g.11b5lzm6b0''ns:m.0pz91'在我的例子中。但是,我编写的代码返回 [('ns:m.0pz91)\nFILTER ', ''), ('ns:m.0pz91 ', ''), ('', 'ns:g.11b5lzm6b0 ')] 而不是 ['ns:m.0pz91 ', 'ns:g.11b5lzm6b0 ']
我通过使用 2 个单独的正则表达式解决了这个问题,即 ns:m\.[^ ]+ns:g\.[^ ]+,但是,我仍然不明白为什么我不能直接使用 (ns:m\.[^ ]+ )|(ns:g\.[^ ]+ ) 来匹配 ns:m\.[^]+ns:g\.[^]+.

最佳答案

由于 \n 并且您匹配任何非 空格 的内容,您的正则表达式不起作用 demo

您可以引用演示网址右侧的说明。

相反,你可以尝试

(ns:[mg]\.\w+)

demo

更新

原始正则表达式的输出中存在元组的原因是什么?

文档说:

this will be a list of tuples if the pattern has more than one group

您的正则表达式有两个捕获组。

关于python - 为什么我写的正则表达式不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59478418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com