2 回答
TA贡献1825条经验 获得超6个赞
以下内容似乎适用于您提供的示例输入。我们只对找到前导整数数字和后面跟有更多数字的潜在分隔符感兴趣。我们实际上不需要寻找任何空格或百分号,因为无论如何我们只对替换任何给定匹配项中的数字感兴趣。如果我错过了什么,请告诉我:
import re
pattern = "\\d{1,3}((?P<separator>[,.])(?P<floating>\\d+))?"
strings = (
"60",
"60.00",
"60,000",
"60.0000",
"60.00%",
"60.00 %",
"100%",
"5",
"% 60",
"% 60,000"
)
def randomize(match):
from random import uniform
integer, floating = divmod(uniform(0, 100), 1)
def get_chars():
yield str(int(integer))
if match.group("separator") is not None:
yield match.group("separator")
precision = len(match.group("floating"))
yield f"{{:.{precision}f}}".format(floating)[2:]
return "".join(get_chars())
for string in strings:
print(re.sub(pattern, randomize, string))
输出:
29
95.08
51,507
9.1783
0.80%
6.56 %
16%
22
% 27
% 93,174
>>>
TA贡献1862条经验 获得超6个赞
可以调用以下函数来生成您的情况所需的随机数。您可以进一步修改它以最适合您的情况。
import numpy as np
def random_gen():
precison = np.random.randint(0,6)
val = np.random.uniform(0, 100)
val = round(val,int(precison))
val = str(val)
white_space = np.random.randint(0,3)
rand_index = np.random.randint(0,len(val))
val = val[0:rand_index] + ' '*white_space + val[rand_index:]
if np.random.randint(0,2) > 0:
if np.random.randint(0,2) > 0:
val = val + "%"
else:
val = "%" + val
return val
random_gen()
添加回答
举报