我有一个大写字母的字符串列表,我想将其中一些字符更改为小写,因为它们是度量单位或缩写。
我是正则表达式的新手,但我设法得到了两个适合我需要的正则表达式:一个用于数字中的'X',另一个用于所需的其余情况。
问题是它改变了整个模式(正如你所看到的"——"),我想要的是正则表达式规则中的字母变成小写。
t1 = 'EXTRUDED PROFILE 50 X 50 MM'
t2 = 'MATERIAL TYPE 3XP WITH A DENSITY OF D= 50KG/M3 AND THICKNESS OF E=8MM'
t3 = 'STEEL TUBE 50X50X3 MM'
list_Txt = [t1, t2, t3]
pattern_X = r'(ds?Xs?d)'
pattern_M = r'(E=|D=)?s?d+s?(X|MM|KG/M)|d+.(MM)'
new_Txt= [re.sub(pattern_X,'--', item) for item in list_Txt]
的回报:
'EXTRUDED PROFILE 5--0 MM', 'MATERIAL TYPE 3XP WITH A DENSITY OF D= 50KG/M3 AND THICKNESS OF E=8MM', 'STEEL TUBE 5---- MM'
我想:
'EXTRUDED PROFILE 50 x 50 mm', 'MATERIAL TYPE 3XP WITH A DENSITY OF d= 50kg/m3 AND THICKNESS OF e=8mm', 'STEEL TUBE 50x50x3 mm'
您可以使用这个python解决方案,并使用lambda来小写匹配的文本:
import re
t1 = 'EXTRUDED PROFILE 50 X 50 MM'
t2 = 'MATERIAL TYPE 3XP WITH A DENSITY OF D= 50KG/M3 AND THICKNESS OF E=8MM'
t3 = 'STEEL TUBE 50X50X3 MM'
list_Txt = [t1, t2, t3]
pat = re.compile(r'(?:[ED]=s*)?(?:d+s*Xs*)*d+s*(?:M[MG]|KG/M)')
new_Txt= [pat.sub(lambda m: m.group().lower(), item) for item in list_Txt]
print (new_Txt)
输出:
['EXTRUDED PROFILE 50 x 50 mm', 'MATERIAL TYPE 3XP WITH A DENSITY OF d= 50kg/m3 AND THICKNESS OF e=8mm', 'STEEL TUBE 50x50x3 mm']
RegEx演示
RegEx细节:
(?:[ED]=s*)?
:可选匹配E=
或D=
,后跟0个或多个空格(?:d+s*Xs*)*
:匹配1+数字+ 0+空格+X
。重复此组0次或更多次d+
:匹配1+位s*
:匹配0个或多个空白(?:M[MG]|KG/M)
:匹配MM
或MG
或KG/M