繁体   English   中英

如何使用Python Regex匹配多用途行字符串?

[英]How to Match mutilple line string using Python Regex?

我有以下2行:

/开始测量ANYNAME1UnterstützungskraftSoftwaremodul

ANYNAME2 1100 - Randomdigits1 Randomdigits2

并且我想匹配ANYNAME1ANYNAME2Randomdigits1Randomdigits2

到目前为止,我可以使用以下正则表达式在第一行中匹配ANYNAME1

_regex_struct = re.compile(r'/begin MEASUREMENT (.*)(.*)\n')

但是我不能去第二行。 如何匹配第二行上的表达式?

我只是假设您的输入。 您可以检查RegexDemo

inputstr = '''/begin MEASUREMENT ANYNAME1 "Unterstützungskraft Softwaremodul "  
SWORD ANYNAME2 1 100 -2342342523 2432343535654
'''
_regex_struct = re.compile(r'/begin\s+MEASUREMENT\s+(?P<name1>[\w.]+)\W.*\nSWORD\s+(?P<name2>[\w.]+)\W.+\s+(?P<digit1>-\d.+|\d.+)\s+(?P<digit2>-\d.+|\d.+)')
_regex_struct.findall(inputstr)

输出:

[('ANYNAME1', 'ANYNAME2', '-2342342523', '2432343535654')]

表达式说明:

\\s =任何空格字符

(?P<>) =创建一组预期的输出

\\w =任何单词字符

\\W =任何非单词字符

\\d =任何数字

+ =表示一个或多个

In [20]: s = '''/begin MEASUREMENT ANYNAME1 "Unterstützungskraft Softwaremodul "
    ...: SWORD ANYNAME2 1 100 -Randomdigits1 Randomdigits2'''

In [31]: re_struct = re.compile(r'/begin MEASUREMENT (\w+)[\s\S]*?SWORD (\w+).*?100 -(\w+) (\w+)')

In [32]: m = re_struct.search(s)

In [33]: m.group(1), m.group(2), m.group(3), m.group(4)
Out[33]: ('ANYNAME1', 'ANYNAME2', 'Randomdigits1', 'Randomdigits2')

您可以在第一行的捕获组中匹配ANYNAME1,然后使用.*到达该行的末尾,并使用\\n匹配一个新行以到达第二行。 在那里,您可以使用3个组来匹配并捕获您的值。

/begin MEASUREMENT ([\w.]+).*\nSWORD ([\w.]+) \d+ \d+ (-?\d+(?:\.\d+)?) (-?\d+(?:\.\d+)?)

正则表达式演示 | Python演示

说明

  • /begin MEASUREMENT逐字匹配后跟一个空格
  • ([\\w.]+).*\\n捕获第1组中的1个以上的字符字符或点,并匹配至字符串末尾。 然后换行
  • SWORD ([\\w.]+)匹配SWORD并在组2中捕获1+次单词char或点
  • \\d+ \\d+匹配空格,1 +位数字,空格,1 +位数字
  • (-?\\d+(?:\\.\\d+)?) (-?\\d+(?:\\.\\d+)?)在第3和第4组中捕获可选的负号,1 +数字和可选的小数部分两者之间的空间

例如:

import re

regex = r"/begin MEASUREMENT ([\w.]+).*\nSWORD ([\w.]+) \d+ \d+ (-?\d+(?:\.\d+)?) (-?\d+(?:\.\d+)?)"
test_str = ("/begin MEASUREMENT ANY.NAME1 \"Unterstützungskraft Softwaremodul \"\n"
    "SWORD ANYN.AME2 1 100 -2342342523 -14.29")
print(re.findall(regex, test_str))

# [('ANY.NAME1', 'ANYN.AME2', '-2342342523', '-14.29')]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM