我想删除首字母缩略词中的点,而不是python字符串中的域名中的点。例如, 我要绳子
'a.b.c. test@test.com http://www.test.com'
变成
'abc test@test.com http://www.test.com'
到目前为止我做的最接近的正则表达式是
re.sub('(?:\s|\A).{1}\.',lambda s: s.group()[0:2], s)
结果是
'ab.c. test@test.com http://www.test.com'
似乎要使上面的regex工作,我需要将regex更改为
(?:\s|\A|\G).{1}\.
但是python中没有匹配结束标记(\G)。
编辑:正如我在评论中提到的,字符串没有特定的格式。这些字符串包含非正式的人工对话,因此可能包含零个、一个或多个缩写或域名。如果可以避免编写“真正的”解析器,我可以犯一些错误。
如果数据的格式总是这样的,那么为什么不通过在空格上拆分将数据分成3部分呢。
然后,从第一个元素中删除句点并使用join重新合并这些部分是非常简单的。
我建议您在“@”(或任何有意义的字符)处拆分字符串,在第一部分进行替换,然后将字符串放回一起。我认为这将比复杂的regexp更好地显示代码的意图。可能是这样的:
您可以简单地删除前面没有两个(或更多)字母的点:
但这当然也会删除以下地址的第一个点:
name.i@foo.bar邮箱
你可以通过这样做来解决这个问题:
但我相信会有更多这样的角落案件。
相关问题 更多 >
编程相关推荐