首页 > 解决方案 > 正则表达式检查字符串是否有任何数字后跟python中的单位并修改它

问题描述

我正在尝试清理一些数据,包括“6cm*8cm”、“6cmx8cm”和“6*8”等文本。我想修改它们,使它们变得相似。请注意,数字是可变的,因此数据可能有“3cm*4cm”等。

# input strings
strings = [
    "6cm*8cm",
    "12mmx15mm",
    'Device stemmer 2mm*8mm',
    'Device stemming 2mmx8mm'
]
# My desired output would be:
desired_strings = [
    '6*8',
    '12*15',
    'Device stemmer 2*8',
    'Device stemming 2*8'
]

我正在使用python的're'。我的偏好是将它们转换为简单的“6*8”(即数字*数字)。请注意,在某些条目中,数据具有如下字符串:'Device stemmer 2mm*8mm',我不想更改其他词。

是否有一种使用正则表达式的 Pythonic 方式来修改相互配对的数字和单位的所有可能组合?

标签: pythonregex

解决方案


我用了:

import re

strings = [
    "6cm*8cm",
    "12mmx15mm",
    'Device stemmer 2mm*8mm',
    'Device stemming 2mmx8mm'
]

for i in strings:
    result = re.sub(r"([0-9]+)(cm|mm)(\*|x)([0-9]+)(cm|mm)", r"\1*\4", i)
    print(result)

注意::
([0-9]+)匹配数字,
(cm|mm):匹配单位并|代表逻辑OR
(\*|x):匹配\*x作为对的分隔符,
\1:给出第一组(这里是第一个数字,例如,6)
\4,:给出第四组(这里是第二个数字,例如, 8)

https://regex101.com/这个答案有帮助。


推荐阅读