正则表达式匹配子字符串之间的值,其中中间值都是相同的字符
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
个字符,.
和一个或多个 0
s
(?![^|])
- 字符串结尾,或 |
.
如果您需要处理 2.2222
、333.333
、5555555.55
等情况,您可以使用
(?<![^|])(\d)*\.+(?![^|])
替换为.
,参见the regex demo。
我正在尝试标准化一组文本文件,其中包含由竖线(“|”)分隔的值列表,这些值当前具有不同的小数位,用于尾随零的值。
这似乎是正则表达式应该能够处理的事情,但我不知道从哪里开始。我找到了可以替换两组子字符串之间的任何值的示例,但没有找到仅当它们之间的值都是相同字符时才匹配的示例。
下面的 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
个字符,.
和一个或多个0
s(?![^|])
- 字符串结尾,或|
.
如果您需要处理 2.2222
、333.333
、5555555.55
等情况,您可以使用
(?<![^|])(\d)*\.+(?![^|])
替换为.
,参见the regex demo。