gpt4 book ai didi

python - 如何在 python 字符串中放置字 rune 字

转载 作者:行者123 更新时间:2023-11-28 16:48:04 26 4
gpt4 key购买 nike

我正在尝试用 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 回标记 = 8,值 = FIX.4.29=006735=A52=20120713-19:32:3634=149=PD56=P98=0108=3010=134

所以它不会在 '\001' 字符处停止。

最佳答案

chr(1) 应该可以工作,"\x01""\001" 也可以。 (注意 chr(1) 已经返回一个字符串,所以你不需要做 str(chr(1))。)在你的例子中它看起来像你有两个 "\001" chr(1),所以除非你有两个数据中一行中的字符数。

你说正则表达式“似乎没有捕捉到它”,但你没有给出输入数据的例子,所以不可能说出原因。

编辑;好的,看起来问题与 \001 无关。这是经典的贪心问题。 tagExp 表达式中的 \S* 将匹配 \001 字符(因为该字符不是空格。所以 \S* 正在吞噬整行。使用 \S*? 使其成为非贪婪的。

编辑:正如其他人所指出的,您的反斜杠看起来也有问题。在正则表达式中,你会遇到一个反斜杠加倍的问题:Python 使用反斜杠来进行它自己的字符串转义(比如 \t 用于制表符,\n 用于换行符),但是正则表达式也出于自己的目的使用反斜杠(例如,\s 表示空白)。通常的解决方案是使用原始字符串,但如果您想使用 "\001" 转义符,则不能这样做。但是,您可以为 timeExp 正则表达式使用原始字符串。然后在您的其他正则表达式中,将反斜杠加倍(\001 除外,因为您希望将其解释为字符代码转义)。

关于python - 如何在 python 字符串中放置字 rune 字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11727475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com