2024-05-15 22:47:02 发布
网友
如果我有一个像这样的字符串:
"[[Category:Political culture]]\n\n [[Category:Political ideologies]]\n\n"
如何提取类别并将其放入列表中? 我很难让正则表达式正常工作。在
要进一步解释Avinash在他的answer中使用的regex:
Category:([^\[\]]*)由几个部分组成:
Category:([^\[\]]*)
Category:
(...)
[^...]
\[
*
在这里,我使用...来表示我删除了一些对解释不重要的字符。在
...
因此,将所有这些放在一起,regex会这样做:
查找“Category:”,然后匹配其后不属于排除字符“[”或“]”的任何数字(包括零)字符。当它碰到一个被排除的字符时,它将停止,并返回(...)部分中与正则表达式匹配的文本。因此regex实际上并没有像您预期的那样查找“[[”或“]]”,因此即使遗漏了它们也会匹配。您可以通过将其更改为\[\[Category:([^\[\]]*)\]\]来强制它查找开头和结尾的双方括号。在
\[\[Category:([^\[\]]*)\]\]
对于第二个正则表达式Category:[^\[\]]*,捕获组(...)被排除,因此Python返回匹配的所有内容,其中包括“Category:”。在
Category:[^\[\]]*
Python代码:
s = "[[Category:Political culture]]\n\n [[Category:Political ideologies]]\n\n" cats = [line.strip().strip("[").strip("]") for line in s.splitlines() if line] print(cats)
输出:
好像你想要这样的东西
>>> str = "[[Category:Political culture]]\n\n [[Category:Political ideologies]]\n\n" >>> re.findall(r'Category:([^\[\]]*)', str) ['Political culture', 'Political ideologies'] >>> re.findall(r'Category:[^\[\]]*', str) ['Category:Political culture', 'Category:Political ideologies']
默认情况下,re.findall将只打印与捕获组中存在的模式匹配的字符串。如果不存在捕获组,则只有findall函数将返回列表中的匹配项。所以在我们的例子中,这个Category:与字符串category:匹配,而这个([^\[\]]*)将捕获任何字符,但不会捕获{}或{}的零次或多次。现在findall函数将返回组索引1中存在的字符。在
re.findall
findall
category:
([^\[\]]*)
要进一步解释Avinash在他的answer中使用的regex:
Category:([^\[\]]*)
由几个部分组成:Category:
匹配文本“Category:”(...)
是一个捕获组,大致意思是“这个组中的表达式是我要提取的块”[^...]
是一个否定集,意思是“不匹配此集中的任何字符”。在\[
和{*
表示“匹配前面的正则表达式定义的项中的零个或多个”在这里,我使用
...
来表示我删除了一些对解释不重要的字符。在因此,将所有这些放在一起,regex会这样做:
查找“Category:”,然后匹配其后不属于排除字符“[”或“]”的任何数字(包括零)字符。当它碰到一个被排除的字符时,它将停止,并返回
(...)
部分中与正则表达式匹配的文本。因此regex实际上并没有像您预期的那样查找“[[”或“]]”,因此即使遗漏了它们也会匹配。您可以通过将其更改为\[\[Category:([^\[\]]*)\]\]
来强制它查找开头和结尾的双方括号。在对于第二个正则表达式
Category:[^\[\]]*
,捕获组(...)
被排除,因此Python返回匹配的所有内容,其中包括“Category:”。在Python代码:
输出:
^{2}$好像你想要这样的东西
默认情况下,}或{}的零次或多次。现在findall函数将返回组索引1中存在的字符。在
re.findall
将只打印与捕获组中存在的模式匹配的字符串。如果不存在捕获组,则只有findall
函数将返回列表中的匹配项。所以在我们的例子中,这个Category:
与字符串category:
匹配,而这个([^\[\]]*)
将捕获任何字符,但不会捕获{相关问题 更多 >
编程相关推荐