模式替换
Pattern Replacement
我是 RegEx 的新手,但仍在接受模式匹配。但我试图理解 模式替换 。我希望更改句子中的货币模式,其中值可以是任何值且不可预测,但始终采用以下格式:
<currency_symbol><number><number><dot><number><number><letter>
例如:
'mr x is worth .4m and mr y is worth .1m'
至:
'mr x is worth 400000 and mr y is worth 100000'
我已成功匹配模式,但无法替换:
>>> import re
>>> sent = "mr x is worth .4m and mr y is worth .1m"
>>> print(re.findall(r'$\d+\.\d+\m', sent))
['.4m', '.1m']
如何实现正则表达式模式替换?或者有比正则表达式更好的方法吗?
进行这样的替换的最简单方法是使用 re.sub
和 repl
:
的函数
>>> import re
>>> source = 'mr x is worth .4m and mr y is worth .1m'
>>> def sub_func(match):
"""Convert the match to the new format."""
string = match.group(0)
millions = int(float(string[1:-1]) * 1000000)
return '${:d}'.format(millions)
>>> re.sub(r'$\d+\.\d+m', sub_func, source)
'mr x is worth 400000 and mr y is worth 100000'
您可以使用 '${:,d}'.format(millions)
获取例如',400,000'
.
我是 RegEx 的新手,但仍在接受模式匹配。但我试图理解 模式替换 。我希望更改句子中的货币模式,其中值可以是任何值且不可预测,但始终采用以下格式:
<currency_symbol><number><number><dot><number><number><letter>
例如:
'mr x is worth .4m and mr y is worth .1m'
至:
'mr x is worth 400000 and mr y is worth 100000'
我已成功匹配模式,但无法替换:
>>> import re
>>> sent = "mr x is worth .4m and mr y is worth .1m"
>>> print(re.findall(r'$\d+\.\d+\m', sent))
['.4m', '.1m']
如何实现正则表达式模式替换?或者有比正则表达式更好的方法吗?
进行这样的替换的最简单方法是使用 re.sub
和 repl
:
>>> import re
>>> source = 'mr x is worth .4m and mr y is worth .1m'
>>> def sub_func(match):
"""Convert the match to the new format."""
string = match.group(0)
millions = int(float(string[1:-1]) * 1000000)
return '${:d}'.format(millions)
>>> re.sub(r'$\d+\.\d+m', sub_func, source)
'mr x is worth 400000 and mr y is worth 100000'
您可以使用 '${:,d}'.format(millions)
获取例如',400,000'
.