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()
添加回答
舉報