首页 > 解决方案 > Python 正则表达式问题与不匹配 \.\s

问题描述

我有一个大型数据集,其中包含许多要匹配的组。除了两个不匹配的组合外,我已经设法将它们全部匹配。对我来说,除了这些之外,为什么其他所有组都会匹配,这对我来说毫无意义。起初它看起来像任何带有句点空格字符的序列都是问题,但后来我设法将其他组与这个序列匹配。我正在读取一个文件,然后使用 if 语句将提取的组写入一个新文件。没有代码的 if 语句部分也存在 RegEx 问题。

我已突出显示要解决的问题的行项目。

任何帮助表示赞赏。

我也试过在最后添加一个 \s

读取文件:

G0 X-69.4 Y-33.8
G43 Z15. H1
Z5.
G98 G81 X-69.4 Y-33.8 Z-27. R5. F126.
X-68.
X-66.6
X-65.2
X-63.8
X-62.4
X-61.
X-58.4 Y-35.2
X-59.6
X-61.
X-62.4
X-63.8
X-65.2
X-66.6
X-68.
X-69.4
X-70.8
X-72.2
**X-75. Y-36.6**
X-73.6
X-72.2
X-70.8
X-69.4
X-68.
X-66.6
X-65.2
X-63.8
X-62.4
X-61.
X-59.6
X-58.4
X-57.
**X-55. Y-38.**

写入文件:

X-69.4 Y-33.8
Z-27 
Z0 

X-69.4 Y-33.8 
Z-27. 
Z0 

X-68.

Z-27 
Z0 

X-66.6
Z-27 
Z0 

X-65.2
Z-27 
Z0 

X-63.8
Z-27 
Z0 

X-62.4
Z-27 
Z0 

X-61.

Z-27 
Z0 

X-58.4 Y-35.2
Z-27 
Z0 

X-59.6
Z-27 
Z0 

X-61.

Z-27 
Z0 

X-62.4
Z-27 
Z0 

X-63.8
Z-27 
Z0 

X-65.2
Z-27 
Z0 

X-66.6
Z-27 
Z0 

X-68.

Z-27 
Z0 

X-69.4
Z-27 
Z0 

X-70.8
Z-27 
Z0 

X-72.2
Z-27 
Z0 

**X-75.** 
Z-27 
Z0 

X-73.6
Z-27 
Z0 

X-72.2
Z-27 
Z0 

X-70.8
Z-27 
Z0 

X-69.4
Z-27 
Z0 

X-68.

Z-27 
Z0 

X-66.6
Z-27 
Z0 

X-65.2
Z-27 
Z0 

X-63.8
Z-27 
Z0 

X-62.4
Z-27 
Z0 

X-61.

Z-27 
Z0 

X-59.6
Z-27 
Z0 

X-58.4
Z-27 
Z0 

X-57.

Z-27 
Z0 

**X-55.**
Z-27 
Z0 

代码

with open(fileToRead, 'r') as readFile:
    with open(fileToWrite, 'w') as writeFile:
        fileContents = readFile.read()
        pattern1 = re.compile(
            r'(X.\d{1,3}\.\d{1,3}?\sY.\d{1,3}\.\d{1,3}?\s)(Z.\d{1,3}\.\d{1,3}?\s)|(X.\d{1,3}\.\sY.\d{1,3}\.\d{1,3}?\s)(Z.\d{1,3}\.\d{1,3}?\s)|(X.\d{1,3}\.\d{1,3}?\sY.\d{1,3}\.\s)(Z.\d{1,3}\.\d{1,3}?\s)|'
            r'(X.\d{1,3}\.\d{1,3}?\sY.\d{1,3}\.\d{1,3}?\s)(Z.\d{1,3}\.\s)|(X.\d{1,3}\.\s)|(X.\d{1,3}\.\d{1,3}$)|(X.\d{1,3}\.\d{1,3}?\sY.\d{1,3}\.\d{1,3}?$)|(X.\d{1,3}\.\sY.\d{1,3}\.\d{1,3}?$)|'
            r'(X.\d{1,3}\.\d{1,3}?\sY.\d{1,3}\.$)|(X.\d{1,3}\.\s^Y.\d{1,3}\.$)', re.M)

        linePrefix = ''
        lineSuffix1 = '\n'
        lineSuffix2 = ''
        lineSuffix3 = '\nZ0 \n\n'
        
        for match in matches1:
            count = count + 1
            if match.group(1):
                format1 = linePrefix.__add__(str(match.group(1))).__add__(lineSuffix1).__add__(linePrefix).__add__(
                    str(match.group(2))).__add__(lineSuffix2).__add__(lineSuffix3)
                print(format1)
                writeFile.write(format1)
            elif match.group(3):
                format2 = linePrefix.__add__(str(match.group(3))).__add__(lineSuffix1).__add__(linePrefix).__add__(str(match.group(4))).__add__(lineSuffix2).__add__(lineSuffix3)
                print(format2)
                writeFile.write(format2)
            elif match.group(5):
                format3 = linePrefix.__add__(str(match.group(5))).__add__(lineSuffix1).__add__(linePrefix).__add__(str(match.group(6))).__add__(lineSuffix2).__add__(lineSuffix3)
                print(format3)
                writeFile.write(format3)
            elif match.group(7):
                format4 = linePrefix.__add__(str(match.group(7))).__add__(lineSuffix1).__add__(linePrefix).__add__(str(match.group(8))).__add__(lineSuffix2).__add__(lineSuffix3)
                print(format4)
                writeFile.write(format4)
            elif match.group(9):
                format5 = linePrefix.__add__(str(match.group(9))).__add__(lineSuffix1).__add__(linePrefix).__add__('Z-27 ').__add__(lineSuffix2).__add__(lineSuffix3)
                print(format5)
                writeFile.write(format5)
            elif match.group(10):
                format6 = linePrefix.__add__(str(match.group(10))).__add__(lineSuffix1).__add__(linePrefix).__add__('Z-27 ').__add__(lineSuffix2).__add__(lineSuffix3)
                print(format6)
                writeFile.write(format6)
            elif match.group(11):
                format7 = linePrefix.__add__(str(match.group(11))).__add__(lineSuffix1).__add__(linePrefix).__add__('Z-27 ').__add__(lineSuffix2).__add__(lineSuffix3)
                print(format7)
                writeFile.write(format7)
            elif match.group(12):
                format8 = linePrefix.__add__(str(match.group(12))).__add__(lineSuffix1).__add__(linePrefix).__add__('Z-27 ').__add__(lineSuffix2).__add__(lineSuffix3)
                print(format8)
                writeFile.write(format8)
            elif match.group(13):
                format9 = linePrefix.__add__(str(match.group(13))).__add__(lineSuffix1).__add__(linePrefix).__add__('Z-27 ').__add__(lineSuffix2).__add__(lineSuffix3)
                print(format9)
                writeFile.write(format9)
            elif match.group(14):
                format10 = linePrefix.__add__(str(match.group(14))).__add__(lineSuffix1).__add__(linePrefix).__add__('Z-27 ').__add__(lineSuffix2).__add__(lineSuffix3)
                print(format10)
                writeFile.write(format10)

            print('\nPATTERN', count, ':\n')

标签: pythonre

解决方案


我不确定你的意图,所以你可以澄清你想要什么。但我确实在在线正则表达式测试器上尝试过这个,它工作正常。

.*(X-\d{1,3}\.\d?\sY-\d{1,3}\.\d?).*


推荐阅读