python - 为什么这个正则表达式找不到结果

标签 python regex

我有一个如下的Python代码:我的问题是为什么匹配的变量是['']? (我使用了regexpal.com中的正则表达式,它可以在那里找到正确的结果|Name=A. Johnson |)

import re
a = 
'{{Infobox U.S. Cabinet |align=left |clear=yes |Name=A. Johnson |President=Andrew Johnson |President start=1865 |President end=1869 |Vice President=None |Vice President start=1865 |Vice President end=1869 |State=[[William H. Seward]] |State start=1865 |State end=1869 |War=[[Edwin M. Stanton]] |War start=1865 |War end=1868 |War 2=[[John Schofield|John M. Schofield]] |War start 2=1868 |War end 2=1869 |Treasury=[[Hugh McCulloch]] |Treasury start=1865 |Treasury end=1869 |Justice=[[James Speed]] |Justice start=1865 |Justice end=1866 |Justice 2=[[Henry Stanberry]] |Justice start 2=1866 |Justice end 2=1868 |Justice 3=[[William M. Evarts]] |Justice start 3=1868 |Justice end 3=1869 |Post=[[William Dennison (Ohio governor)|William Dennison]] |Post start=1865 |Post end=1866 |Post 2=[[Alexander Randall|Alexander W. Randall]] |Post start 2=1866 |Post end 2=1869 |Navy=[[Gideon Welles]] |Navy start=1865 |Navy end=1869 |Interior=[[John P. Usher]] |Interior date=1865 |Interior 2=[[James Harlan (senator)|James Harlan]] |Interior start 2=1865 |Interior end 2=1866 |Interior 3=[[Orville H. Browning]] |Interior start 3=1866 |Interior end 3=1869 }}'
matched = re.findall("\|?\s*name\s*=(.)*?\|",a,re.I)

最佳答案

您需要 (.*?),而不是 (.)*? - 后者(您拥有的)只会捕获单个字符,即使它消耗不止一个。即使组本身有重复,捕获组也只会返回一次;因此后者捕获单个字符 (.) 尽管它重复。

如果您使用 (.*?) 将重复移动到捕获组中,您将在返回中得到多个字符。

关于python - 为什么这个正则表达式找不到结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10678916/

相关文章:

python - 已安装 OpenCV 但导入时仍找不到

python - Spark 数据框更新列,其中其他列与 PySpark 类似

JavaScript 正则表达式 : R naming conventions

javascript - 从 Javascript 中的正则表达式匹配中排除单词数组

python - 正则表达式查找嵌套括号之间的文本

python - Pandas Multiindex - 对组执行操作

python - PyDev 调试器与命令行 django runserver 命令不同

python - 使用 fnmatch 匹配文件名的 2 部分

ruby-on-rails - 正则表达式使 Ruby 完全卡住

r - 使用正则表达式提取姓名和数字