我的文字如下:
asf aSD ikugfr jddc ghddfj gjn dfxg
sdgal fghfh 16 rgjodrisgj frth fghsdf,
dfghdf dfhgdh gho h ghdof 67676
szdgfads
2 adf dojosd hsh fghs,
zfgdf dhgdzsfb dfgdz,
dzgdzfvg 47564
asdgasdg asdg
4334 ersga errr ertgerfd ertera erers qereadf erfesfdc wefadfe,
sfsdgfg-43647
我需要提取所有字符串,其中行的开头是数字,以5位数结尾。中间可以有多行。
2 adf dojosd hsh fghs,
zfgdf dhgdzsfb dfgdz,
dzgdzfvg 47564
4334 ersga errr ertgerfd ertera erers qereadf erfesfdc wefadfe,
sfsdgfg-43647
我试过这个正则表达式但未能这样做。它只取两行,而不是单行或两行以上。
regex = ^[0-9](.*)(?<=,)*\n?(.*\D\d{5}\D)
答案 0 :(得分:4)
您的^[0-9](.*)(?<=,)*\n?(.*\D\d{5}\D)
正则表达式匹配字符串/行的开头,然后是1位数,然后是0 +任何字符(如果不使用DOTALL模式,则除了换行符),然后(?<=,)*
应该检查0 +如果前面的字符是逗号(虽然Python不介意它没有多大意义),然后\n?
匹配1或0个换行符,.*
匹配0 +除了换行符之外的任何字符{ {1}}匹配非数字,\D
匹配5位数,\d{5}
再次匹配非数字。令人讨厌。我认为它不适用于任何包含3行以上的匹配(请注意\D
匹配换行符),它永远不会匹配字符串末尾的有效匹配作为最后一行{{1}在最后5位数后需要一个字符。
您可以使用
\D
请参阅regex demo
您需要对模式使用DOTALL修饰符,以便\D
可以匹配换行符,并使用re.compile(r'^\d.*?\b\d{5}$', re.M|re.DOTALL)
和.
的MULTILINE修饰符来匹配行的。 ^
将不允许在行尾添加超过5位的字符串。
与$
一起使用,请参阅demo:
\b