Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python正则表达式固定长度字段,包含指定的字符和子字符串_Python_Regex - Fatal编程技术网

python正则表达式固定长度字段,包含指定的字符和子字符串

python正则表达式固定长度字段,包含指定的字符和子字符串,python,regex,Python,Regex,如何捕获具有固定长度字段(包括指定字符和子字符串)的行?在这种情况下: 每个字段包含8个字符 第一个字段仅包括“RBE3”和空格 第三个字段仅包含“123”和空格 输入: 123456781234567812345678123... (char numbers) RBE3 323123 123121 RBE3 323123 123 121 RBE3 32312300123 121 RBE3 3231231234 121 $ RB

如何捕获具有固定长度字段(包括指定字符和子字符串)的行?在这种情况下:

  • 每个字段包含8个字符
  • 第一个字段仅包括“RBE3”和空格
  • 第三个字段仅包含“123”和空格
输入:

123456781234567812345678123... (char numbers)
RBE3    323123       123121
  RBE3  323123   123    121
RBE3    32312300123     121
RBE3    3231231234      121
$ RBE3  323123123       121
R B E3  32312     123   121
     RBE32312       12313
产出将是:

RBE3    323123       123121
  RBE3  323123   123    121
RBE3    32312300123     121
我试过:

regex = r'^([RBE3\s]{8}.{8}[123\s]{8}.*\n)'

但这似乎是一个完全错误的方向

我强烈建议不要为此使用单一的正则表达式。最好把你的行分成8块,然后验证它们

如果你坚持,这是可能的,但很难看:

^(\s*RBE3\s*)(?<=^.{8})(.{8})(\s*123\s*)(?<=^.{24})(.*)$
^(\s*RBE3\s*)(?第3组)
(?第4组)
$#字符串/行的结尾

测试它。请注意,只有第2行和第3行满足您所述的要求。

我强烈建议不要为此使用单个正则表达式。最好将您的行切分为8行,然后验证它们

如果你坚持,这是可能的,但很难看:

^(\s*RBE3\s*)(?<=^.{8})(.{8})(\s*123\s*)(?<=^.{24})(.*)$
^(\s*RBE3\s*)(?第3组)
(?第4组)
$#字符串/行的结尾

测试它。请注意,只有第2行和第3行满足您所述的要求。

对于计算正确的正则表达式非常有用。如果每个字段包含8个字符,为什么在每个匹配项中每行有27个字符?有27个字符,因为每行最多可以包含9个字段,而我没有编写其余的。您的输出不满足您的要求…对于计算正确的正则表达式非常有用如果每个字段包含8个字符,为什么在每个匹配项中每行有27个字符?有27个字符,因为每行最多可以包含9个字段,而我没有编写其余字段。输出的第三行不满足您的要求恩茨。。。