在Python

时间:2018-05-31 11:52:21

标签: regex python-3.x regex-group

在预处理数据时,我将获得具有不同格式的相同数字特征。 例如:

1x4 wire       1 x 4 wire
1-1/2x1 wire   1-1/2 x 1 wire
11/2x1 wire    1-1/2 x 1 wire 

我需要将不同格式标准化为单一格式。

我们认为一个approch是删除x, - ,/和空格并组合所有内容。 即:

1x4 wire       1 x 4 wire         14 wire
1-1/2x1 wire   1-1/2 x 1 wire     1121 wire
11/2x1 wire    1-1/2 x 1 wire     1121 wire

有谁能说出如何在Python中实现上述方法?

我尝试使用以下代码来匹配所需的模式:

import re
regex = re.compile('(\d+.*?)\s?')

我没有得到如何将其输出用于re.sub

1 个答案:

答案 0 :(得分:1)

以下两种方法可以使用re.sub删除任何字符x, - 或/,如果它位于数字字符之前和之后,空格位于前后位置:

import re

myText = """
            1-1/2x1 wire cross box
            1x4 wire       1 x 4 wire         14 wire
            1-1/2x1 wire   1-1/2 x 1 wire     1121 wire
            11/2x1 wire    1-1/2 x 1 wire     1121 wire
        """

# First way
myNewText1 =  re.sub(r'(?<=([0-9])) *[x\-\/] *(?=([0-9]))', '', myText)
print(myNewText1)

# Second way (by defining first a regex pattern)
myPattern = re.compile(r'(?<=([0-9])) *[x\-\/] *(?=([0-9]))')
myNewText2 =  myPattern.sub('', myText)
print(myNewText2)

两者都打印出以下结果:

1121 wire cross box
14 wire       14 wire         14 wire
1121 wire   1121 wire     1121 wire
1121 wire    1121 wire     1121 wire