test_str = '**Amount** : $25k **Name** : James'
预期输出:
output: Amount: $25k, Name: James
我只能使用re.sub函数来移除/替换分隔符**单词**,但无法得到预期的结果。
此外,是否可以将代码泛化为在所有分隔符(**xx**,< xx>等)上实现?
发布于 2018-07-25 05:17:06
我使用re.sub
的方法。第一个re.sub
删除*
,第二个re.sub
添加逗号:
import re
test_str = '**Amount** : $25k **Name** : James'
s = re.sub(r'\s*([^:\s]+)\s*:\s*([^\s]+)', r'\1: \2, ', re.sub(r'[\*\s]+', ' ', test_str)).rstrip(', ')
print(s)
输出:
Amount: $25k, Name: James
以*,<,>作为分隔符:
test_str = '**Amount** : $25k **Name** : James <<Name2>> : Another <Name3> : Jack'
s = re.sub(r'\s*([^:\s]+)\s*:\s*([^\s]+)', r'\1: \2, ', re.sub(r'[\*<>\s]+', ' ', test_str)).rstrip(', ')
print(s)
输出:
Amount: $25k, Name: James, Name2: Another, Name3: Jack
发布于 2018-07-25 04:10:05
这对你来说应该是可行的
st='**Amount** : $25k **Name** : James'
stage1=re.sub(r"\**","",st)
re.sub(r'(?<=\:\s\S\S\S\S\s)',",",stage1)
输出将是
'Amount : $25k , Name : James'
要匹配正则表达式,您必须查看在线正则表达式测试器,如this one
发布于 2018-07-25 13:56:33
一个正则表达式,但使用lambda:
re.sub(r"\*|\s(?=:)|(?<=\d)k\s*",lambda m:"k, " if "k" in m.group() else "",test_str)
'Amount: $25k, Name: James'
https://stackoverflow.com/questions/51506656
复制相似问题