我有一个字符串' DIM D =9999 \ PE TS D(A(4))'
并希望使用正则表达式将该字符串分为几部分。请注意,'DIM'
'='
是常数,在=
之后始终是数字,但是在数字之后,内容可能会发生很大变化。但是'DIM'
和'='
之间的空格可能会逐字符串不同。此差异也适用于以下子字符串。另外,我希望将'PE TS'
视为一个元素。
因此,我认为该字符串可以具有多个组:'DIM'
,'D'
,'=9999'
,'\'
,'PE TS'
,'D(A(4))'
。
我尝试过re.match,但是找不到适合它的模式表达式。
match = re.match('(DIM\s+\S)(\d*)(\S+)([\w\s]*)(\s*\w*)', line)
我希望看到:
'DIM', '= 9999', '\', 'PE TS','D(A(4))'
但是,我总是不返回任何内容。
答案 0 :(得分:2)
也许,这种表达有点类似于
(DIM\s+\S+)\s*(=\s*\d+)\s*(\S+)\s*(.+?)\s{2,}(.+)
可能可以,但是不确定。
import re
regex = r"(DIM\s+\S+)\s*(=\s*\d+)\s*(\S+)\s*(.+?)\s{2,}(.+)"
test_str = """
DIM D =9999 \ PE TS D(A(4))
DIM AZ = 9999 \ PE TS AC AB D(A(4))
"""
print(re.findall(regex, test_str))
[('DIM D', '=9999', '\\', 'PE TS', 'D(A(4))'), ('DIM AZ', '= 9999', '\\', 'PE TS AC AB', 'D(A(4))')]
该表达式在regex101.com的右上角进行了解释,如果您想探索/简化/修改它,在this link中,您可以观察到它如何与某些示例输入匹配,如果愿意的话。
答案 1 :(得分:1)
我确定match
不会满足您的期望,因为:
\
,(
和)
),match
仅选择开头的内容的字符串。 search
并具有正确的正则表达式,则search
会与DIM D =9999 \ PE TS D(A(4))
匹配并且不会拆分。.group()
之后使用.groups()
或re.search(...)
来将匹配项作为字符串检索。 DIM
,一个用于=9999
,等等)这是我分割字符串的方法,尽管艾玛的回答可能更好:
import re
myString = ' DIM D =9999 \ PE TS D(A(4))'
# DIM D
dim = re.search('(DIM\s+\S)', myString).group()
equals9999 = re.search('(=\s*\d+)', myString).group()
backslash = re.search(r'\\', myString).group()
twoDoubleLetters = re.search(r'\\(\s+\w+\s+\w+)', myString).group()[2:]
cellMarker = re.search(r'\w\(\w\(\d\)\)', myString).group()
print(dim) # DIM D
print(equals9999) # =9999
print(backslash) # \
print(twoDoubleLetters) # PE TS
print(cellMarker) # D(A(4))