我正在尝试在 python 中编写一个正则表达式,其中涉及的字符之一是 \001 字符。将 \001 放入字符串中似乎不起作用。我也试过'string' + str(chr(1)),但正则表达式似乎没有抓住它。请看在上帝的份上,有人帮助我,我整天都在为此苦苦挣扎。
import sys
import postgresql
import re
if len(sys.argv) != 2:
print("usage: FixToDb <fix log file>")
else:
f = open(sys.argv[1], 'r')
timeExp = re.compile(r'(\d{2}):(\d{2}):(\d{2})\.(\d{6}) (\S)')
tagExp = re.compile('(\\d+)=(\\S*)\001')
for line in f:
#parse the time
m = timeExp.match(line)
print(m.group(1) + ':' + m.group(2) + ':' + m.group(3) + '.' + m.group(4) + ' ' + m.group(5));
tagPairs = re.findall('\\d+=\\S*\001', line)
for t in tagPairs:
tagPairMatch = tagExp.match(t)
print ("tag = " + tagPairMatch.group(1) + ", value = " + tagPairMatch.group(2))
这是输入的示例行。为了便于阅读,我将 '\001' 字符替换为 '~'
15:32:36.357227 R 1 0 0 0 8=FIX.4.2~9=0067~35=A~52=20120713-19:32:36~34=1~49=PD~56=P~98=0~ 108=30~10=134
输出:
15:32:36.357227 R 标签 = 8,值 = FIX.4.29=006735=A52=20120713-19:32:3634=149=PD56=P98=0108=3010=134
所以它不会停留在 '\001' 字符处。