我想解析一个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]
它可以产生预期的结果,但效果并不理想,我相信有更好的方法。
答案 0 :(得分:2)
您必须坚持使用ExpressionAttributeValues: {
":start_date": new Date(event.start_date).toISOString(),
":end_date": new Date(event.end_date).toISOString()
},
吗?
没有那么简单:
re
答案 1 :(得分:2)
您可以使用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
)和点(方括号内的点仅匹配.
字符)之外的0个或多个字符\K
-匹配重置运算符会丢弃当前迭代中到目前为止所有匹配的文本\.
-点。如果使用捕获/反向引用,则可以不用\K
:
regex.sub(r'\G([^\s.]*)\.', r'\1\\.', s)
答案 2 :(得分:2)
您可以找到第一个单词并替换其中的.
,例如:
import re
line = 'DXa0.Xa1.a2.b3.b4 p1 p2 deviceName a=157.585p b=54.46u $x=106.124 $y=107.996 $a=0'
def repl(m):
return m.group().replace(".", "\\.")
print(re.sub(r"^\S+", repl, line.lstrip()))
输出
DXa0\.Xa1\.a2\.b3\.b4 p1 p2 deviceName a=157.585p b=54.46u $x=106.124 $y=107.996 $a=0