gpt4 book ai didi

python - 替换一行中第一个单词中匹配正则表达式的所有匹配项

转载 作者:太空狗 更新时间:2023-10-30 02:24:31 25 4
gpt4 key购买 nike

我想解析一个 ASCII 文件并转义“.”每行第一个单词中的字符。这是一个例子:

line='DXa0.Xa1.a2 p1 p2 deviceName  a=157.585p b=54.46u $x=106.124 $y=107.996 $a=0'

我想制作以下内容

DXa0\.Xa1\.a2 p1 p2 deviceName  a=157.585p b=54.46u $x=106.124 $y=107.996 $a=0

我可以为此示例运行以下命令:

re.sub(r"\.", '\\.', line, count=2 )

但这假设有 2 个“.”单词中的字符,这是不能保证的。我现在找到的解决方法是

re.sub(r"\.", '\\.', line.split(' ', 1)[0]) + ' ' + line.split(' ', 1)[1]

它产生了预期的结果,但并不完美,我相信有更好的方法。

最佳答案

您可以通过 re 实现这一点,使用正则表达式将第一个单词匹配到第一行非空白字符之后的第一个空白,并将 lambda 表达式作为替换参数:

re.sub(r"^\s*\S+", lambda x: x.group().replace('.', r'\.'), s)

在这里,^\s*\S+ 匹配字符串开头的任何 0+ 个空格,然后是 1+ 个非空格,然后是所有 .匹配 (x.group()) 替换为 \. 字符序列。

参见 Python demo .

如果安装 PyPi regex module ,您将能够通过单个 regex.sub 调用实现所需的功能:

import regex
s = 'DXa0.Xa1.a2 p1 p2 deviceName a=157.585p b=54.46u $x=106.124 $y=107.996 $a=0'
rx = r'\G[^\s.]*\K\.'
print(regex.sub(rx, r'\\.', s))

参见 Python demo .另请参阅 this regex demo .

详情

  • \G - 字符串的开头或上一次成功匹配的结尾
  • [^\s.]* - 除空格 (\s) 和点(方括号内的点仅匹配 . 字符)
  • \K - 匹配重置运算符丢弃当前迭代中到目前为止匹配的所有文本
  • \. - 一个点。

如果你使用捕获/反向引用,你可以不用 \K:

regex.sub(r'\G([^\s.]*)\.', r'\1\\.', s)

关于python - 替换一行中第一个单词中匹配正则表达式的所有匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52976404/

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