正则表达式匹配子字符串之间的值,其中中间值都是相同的字符

Regex to match values between substrings where the middle values are all the same character

我正在尝试标准化一组文本文件,其中包含由竖线(“|”)分隔的值列表,这些值当前具有不同的小数位,用于尾随零的值。

这似乎是正则表达式应该能够处理的事情,但我不知道从哪里开始。我找到了可以替换两组子字符串之间的任何值的示例,但没有找到仅当它们之间的值都是相同字符时才匹配的示例。

下面的 Python 代码显示了我正在尝试实现的最小示例(如果替换成功,断言应该通过)。任何帮助将不胜感激。

import re

str_in = '4|5|0.00000000|'
expected_str_out = '4|5|0.0|'

str_out = re.sub('0.(.*?)\|', '0.0|', s)
assert str_out == expected_str_out

您可以使用

import re

str_in = '4|5|0.00000000|'
expected_str_out = '4|5|0.0|'

str_out = re.sub(r'(?<![^|])0+\.0+(?![^|])', '0.0', str_in)
print( str_out == expected_str_out )

参见online Python demo and the regex demo

正则表达式匹配

  • (?<![^|]) - 字符串的开头或 |
  • 0+\.0+ - 一个或多个 0 个字符,. 和一个或多个 0s
  • (?![^|]) - 字符串结尾,或 |.

如果您需要处理 2.2222333.3335555555.55 等情况,您可以使用

(?<![^|])(\d)*\.+(?![^|])

替换为.,参见the regex demo