如何获取以数字开头的行为开头的字符串,以5位数字结尾

时间:2016-06-14 06:37:58

标签: python regex

我的文字如下:

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)

1 个答案:

答案 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