Python 将字符插入数字末尾的字符串

Python 将字符插入数字末尾的字符串,python,regex,string,insert,separator,Python,Regex,String,Insert,Separator,我有一根难看的绳子: oldstr = "0.100% fDrg: 2%,dgdv: 29% fGd dg 0.2%, Ghh-sf 2.2 dbgh: NONE dfgdf6 gd 3 " 我需要在数字的最后一位之后插入char,以便通过此插入的进行下一次拆分。还有一个值none,其中还添加了此分隔符: 0.100| fdrg: 2|,dgdv: 29| fgd dg 0.2|, ghh-sf 2.2|dbgh: none| dfgdf6|gd 3| 我尝试了一下,但没有成功: print

我有一根难看的绳子:

oldstr = "0.100% fDrg: 2%,dgdv: 29% fGd dg 0.2%, Ghh-sf 2.2 dbgh: NONE dfgdf6 gd 3 "
我需要在数字的最后一位之后插入char
,以便通过此插入的
进行下一次拆分。还有一个值
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'\1|', 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"\1|", oldstr)
'0.100| fDrg: 2|,dgdv: 29| fGd dg 0.2|, Ghh-sf 2.2| dbgh: NONE| dfgdf6| gd 3| '
在这里,我们捕获a中出现的一个或多个数字和点或
NONE
(后跟可选的
%
符号),并将其替换为自身和管道字符

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

您可以使用

(\bnone\b|\d+(?:\.\d+)?)%?
并替换为
\1 |

说明:

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

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 = "\1|"
result = re.sub(p, subst, test_str)
如果需要修剪值,可以在拆分后进行。另外,
none
在使用
re.sub(r'\b\none\b',none',input)
处理文本之前,可以将其改为小写

输出:

0.100| fDrg: 2|,dgdv: 29| fGd dg 0.2|, Ghh-sf 2.2| dbgh: NONE| dfgdf6| gd 3|
再思考一下,这里有一行:

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

最糟糕的是,您似乎试图修剪整数后面的值。你真的需要吗?此外,我认为没有简单的方法将
none
转换为小写。检查。
print re.sub(r"([\.\d'NONE']+)%?", r"\1|", oldstr)