将字符插入字符串到数字末尾

Insert char to string to end of number

我的字符串很难看:

oldstr = "0.100% fDrg: 2%,dgdv: 29% fGd dg 0.2%, Ghh-sf 2.2 dbgh: NONE dfgdf6 gd 3 "

需要在数字的最后一位之后插入字符|,以便下次按此插入的|进行拆分。还有值none,这里也加了这个分隔符:

0.100| fdrg: 2|,dgdv: 29| fgd dg 0.2|, ghh-sf 2.2|dbgh: none| dfgdf6|gd 3|

尝试这个,但没有成功:

print re.sub(r'(\d+[a-z %^.])', r'|', oldstr.lower())

0.|100%| fdrg: 2%|,dgdv: 29%| fgd dg 0.|2%|, ghh-sf 2.|2 |dbgh: none dfgdf6 |gd 3 |

任何帮助将不胜感激。

怎么样:

>>> re.sub(r"([\d\.]+|NONE)%?", r"|", oldstr)
'0.100| fDrg: 2|,dgdv: 29| fGd dg 0.2|, Ghh-sf 2.2| dbgh: NONE| dfgdf6| gd 3| '

这里我们捕获一个或多个数字和点或 capturing group 中的 NONE(后跟一个可选的 % 符号)并将其替换为自身和一个管道字符。

请注意 比这个答案要好得多。

你可以使用

(\bnone\b|\d+(?:\.\d+)?)%?

并替换为|

解释:

  • (\bnone\b|\d+(?:\.\d+)?) - 第 1 组匹配 2 个备选方案:
    • \bnone\b - 整个单词 none
    • | - 或...
    • \d+(?:\.\d+)? - 浮点值(\d+ 匹配一个或多个数字,(?:\.\d+)? 匹配(可选)一个点后跟一个或多个数字)
  • %? - 可选(因为 ? 表示 匹配一次或零次 % 符号

regex demo

Python代码:

import re
p = re.compile(ur'(\bnone\b|\d+(?:\.\d+)?)%?', re.IGNORECASE)
test_str = "0.100% fDrg: 2%,dgdv: 29% fGd dg 0.2%, Ghh-sf 2.2 dbgh: NONE dfgdf6 gd 3 "
subst = "|"
result = re.sub(p, subst, test_str)

如果需要trim值,拆分后即可。此外,在使用 re.sub(r'\b\none\b', 'NONE', input).

处理文本之前,可以将 none 变为小写
import re
oldstr = "0.100% fDrg: 2%,dgdv: 29% fGd dg 0.2%, Ghh-sf 2.2 dbgh: NONE dfgdf6 gd 3"

newstring = re.sub(r"([\.\d]+)", r"|", oldstr)
print newstring.replace("%","").replace("NONE","NONE|")

输出:

0.100| fDrg: 2|,dgdv: 29| fGd dg 0.2|, Ghh-sf 2.2| dbgh: NONE| dfgdf6| gd 3|

稍微思考一下这里是one-liner:

print re.sub(r"([\.\d'NONE']+)%?", r"|", oldstr)