如何将字符串列表中的字符更改为小写如果它匹配正则表达式?



我有一个大写字母的字符串列表,我想将其中一些字符更改为小写,因为它们是度量单位或缩写。

我是正则表达式的新手,但我设法得到了两个适合我需要的正则表达式:一个用于数字中的'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):匹配MMMGKG/M

相关内容

最新更新