我试图使用findall()方法在给定文本中查找名称。当我使用search()方法时 我的名字出现在文本中,但芬德尔根本不工作
给定的文本是:
我试图找到那些粗体的名字
R120221325ARYAN BAJAJ YASHWARDHANMANISHA 716012335X SMD Grd Crd在TH[IN+TH]TW PR或Tot%Crd Grd Pts~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~018/030046/070064/100---------------64 03 A 08 24 406262----------040/050 80 01 O 10 406263 019/030055/070 074/100----------74 03 A+09 27 406263----------042/050----------84 01 O 10406264D 024/030043/070067/100---------------67 03 A 08 24 406264D----------040/050 80 01 O 10 406265D 016/030050/070 066/100----------66 03 A 08 24 406266----------045/05010 20 410249C---------PP------PP 00 00 00 00 SEM.:2 406268*020/030 034/070 054/100----------54 03 B 06 18 406268*----PP------044/050 88 01 O 10 406269*023/030 047/070 070/100-----------------70 03 A+09 27 406269---------------043/050 86 01 O 10 406270C*024/030 053/070 077/100----------77 03 A+09 27 406270C----------040/050 80 01 O 10 406271B*024/030 045/070 069/100----69 03 A 08 24 406273----092/100----92 04 O 10 40 406273----047/050 94 02 O 10 20 406274----042/050----84 01 O 10 10第四年SGPA:8.8,获得的总学分:44 B150084606DHAIRYA YASHRAJ SALUNKEHEENA 716012335X SMDS Grd Crd在第[IN+TH]天TW PR或Tot%Crd Grd Pts~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~022/030047/070069/100---------------69 03 A 08 24 406262----------043/050 86 01 O 10 406263 021/030050/070 071/100----------71 03 A+09 27 406263----------045/050-------90 01 O 10406264D*025/030040/07065/100---------------65 03 A 08 24 406264D----------045/050 90 01 O 10 10 406265D 024/030044/070 068/100----------68 03 A 08 24 406266----------043/050----------86 02 O1020410249C--------------PP---------PP 00 00 P 00 00 SEM.:2 406268*012/030 038/070 050/100----------50 03 B 06 18 406268*----041/050 82 01 O 10 406269*021/030 045/070 066/100----------66 03 A 08 24 406269*-------——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————406273----096/100----96 04 O 10 40 406273----047/050 94 02 O 10 20 406274----042/050----84 01 O 10 10第四年SGPA:8.66,总学分:44
我写的正则表达式是:
re.compile(r'\s{1,}\w*\s{1,}?\w*\s{1,}?\w*\s{1,}').findall()
在芬德尔的帮助下,我得到了一个空字符串列表
我想在这里做的是在文本中找到三个连续的名字,用最小的空格隔开。因为在整个文本中只有两个这样的名称,但我并没有得到想要的输出,而是得到了一个充满空值的列表。 但搜索给了我正确的输出,但我希望这里有两个匹配项,搜索只返回它找到的第一个匹配项
在将整个文本缩减到最小值,然后包含两个8位数字和一个字符之间的值(如这里的R120221325、716012335X)之后,我就能够得到这个结果
但如果我能在不将文本减少到最小的情况下得到答案,这将节省很多麻烦
很抱歉问了这么长时间,但我找不到它的答案,我试了这么久
感谢您的帮助
这是因为
\w*
匹配任何个单词字符,包括0,因此您的regexp在三个连续的空格上匹配将正则表达式更改为:
+
表示1次或多次出现,而不是零次或多次出现您可以利用间距数量的差异
这些值位于第一个捕获组中
解释
\b
字边界[A-Z]\d{9}\s+
匹配A-Z,9位数字(而不是8位数字)(
捕获组1(?:\w+\s)+\w+
重复1+次匹配1+字字符和一个空格字符,后跟1+字字符)
关闭组1(?:\s{2,}\w+)+
重复1+次,匹配2个或多个空格字符和1+单词字符\s+\d{9}[A-Z]
匹配1+个空格字符,后跟9个数字和一个字符a-Z\b
字边界Regex demoPython demo
相关问题 更多 >
编程相关推荐