這是輸入字串
string1 = 0.9% SODIUM CHLORIDE 8290306544 FLUSH 0.9 % SYRINGE 10 ML
string2 = 0.9% SODIUM CHLORIDE 8290-3071-44 FLUSH 0.9 % SYRINGE 10 MM
string3 = 0.9% SODIUM CHLORIDE 290306544 FLUSH 0.9 % SYRINGE 10 cm
這是我正在處理的三個字串,所以在這里我想要兩個從數字中洗掉空格,然后是單位/維度/測量值和 %,例如 - 10 ML => 10ML但8290306544FLUSH 這是錯誤的。第二件事是如果有 10 位數字,則將格式設定為 4 位 - 4 位 - 2 位。例如- 8290-3065-44,如果有 9 位數字,則首先添加零并使其格式化。例如- 290306544 => 0290306544 => 0290-3065-44
我想要像這樣的輸出
string1 = 0.9% SODIUM CHLORIDE 8290-3065-44 FLUSH 0.9% SYRINGE 10ML
string2 = 0.9% SODIUM CHLORIDE 8290-3071-44 FLUSH 0.9% SYRINGE 76MM
string3 = 0.9% SODIUM CHLORIDE 0290-3065-44 FLUSH 0.9% SYRINGE 65cm
我如何為此制作python函式
uj5u.com熱心網友回復:
此代碼可能會對您有所幫助。
# pip install quantities
from quantities import units
string1 ='0.9% SODIUM CHLORIDE 8290306544 FLUSH 0.9 % SYRINGE 10 ML'
string2 = '0.9% SODIUM CHLORIDE 8290-3071-44 FLUSH 0.9 % SYRINGE 10 MM'
string3 = '0.9% SODIUM CHLORIDE 290306544 FLUSH 0.9 % SYRINGE 10 cm'
def string_formater(string):
unit_symbols = [u.symbol for _, u in units.__dict__.items() if isinstance(u, type(units.deg))] # list of all units
string = string.strip().split(' ') # strip remove unwanted spaces and split make a list.
for a in string:
if a.lower() in unit_symbols or a.upper() in unit_symbols: # if a is a unit then combine it with his previous value example '10','cm' then it becomes '10cm'.
index = string.index(a)
string[index-1] = string[index-1] string[index]
del string[index]
def number_formater(num):
num = list(num)
num.insert(4,'-')
num.insert(9,'-')
return(''.join(num)) # return the formated number with dash('-')
for a in string:
if a.isdigit():
if len(a) == 9:
index = string.index(a)
a = '0' a
string[index] = number_formater(a)
elif len(a) == 10:
index = string.index(a)
string[index] = number_formater(a)
return(' '.join(string))
print(string_formater(string1)) # 0.9% SODIUM CHLORIDE 8290-3065-44 FLUSH 0.9% SYRINGE 10ML
print(string_formater(string2)) # 0.9% SODIUM CHLORIDE 8290-3071-44 FLUSH 0.9% SYRINGE 76MM
print(string_formater(string3)) # 0.9% SODIUM CHLORIDE 0290-3065-44 FLUSH 0.9% SYRINGE 65cm
uj5u.com熱心網友回復:
另一種方式:
import re
string1 = '0.9% SODIUM CHLORIDE 8290306544 FLUSH 0.9 % SYRINGE 10 ML'
string2 = '0.9% SODIUM CHLORIDE 8290-3071-44 FLUSH 0.9 % SYRINGE 10 MM'
string3 = '0.9% SODIUM CHLORIDE 290306544 FLUSH 0.9 % SYRINGE 10 cm'
def repl(x):
print(x)
s =x.group(1)
if s is not None:
t = ('0' s if len(s) == 9 else s)
return f'{t[:4]}-{t[4:6]}-{t[6:]}'
s1 = x.group(2)
if s1 is not None:
return s1.replace(' ', '')
def my_fun(string):
return re.sub(r'(\b\d{9,10}\b)|(\d{1,3} [%a-zA-Z]{1,2})', repl, string)
my_fun(string1)
Out[]: '0.9% SODIUM CHLORIDE 8290-30-6544 FLUSH 0.9% SYRINGE 10ML'
my_fun(string2)
Out[]: '0.9% SODIUM CHLORIDE 8290-3071-44FLUSH 0.9% SYRINGE 10MM'
my_fun(string3)
Out[]: '0.9% SODIUM CHLORIDE 0290-30-6544 FLUSH 0.9% SYRINGE 10cm'
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/461244.html
標籤:Python python-3.x 正则表达式 蟒蛇重新
