python - Python 正则表达式问题与不匹配 \.\s
问题描述
我有一个大型数据集,其中包含许多要匹配的组。除了两个不匹配的组合外,我已经设法将它们全部匹配。对我来说,除了这些之外,为什么其他所有组都会匹配,这对我来说毫无意义。起初它看起来像任何带有句点空格字符的序列都是问题,但后来我设法将其他组与这个序列匹配。我正在读取一个文件,然后使用 if 语句将提取的组写入一个新文件。没有代码的 if 语句部分也存在 RegEx 问题。
我已突出显示要解决的问题的行项目。
任何帮助表示赞赏。
(X.\d{1,3}\.\sY.\d{1,3}\.\d{1,3}?$) # match NOT found X-75. Y-36.6
(X.\d{1,3}\.\sY.\d{1,3}\.$) # match NOT found X-55. Y-38.
我也试过在最后添加一个 \s
(X.\d{1,3}\.\sY.\d{1,3}\.\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')
解决方案
我不确定你的意图,所以你可以澄清你想要什么。但我确实在在线正则表达式测试器上尝试过这个,它工作正常。
.*(X-\d{1,3}\.\d?\sY-\d{1,3}\.\d?).*
推荐阅读
- pdf - rmarkdown::pandoc_convert 从 md 到 pdf
- javascript - 为什么在 Google Cloud 中调用 HTTP 函数时出现 UNAUTHORIZED 错误?
- android - Stream builder 在第一次加载屏幕时未加载所需的数据,然后在更改选项卡后正常工作:Flutter
- python - 如何解决“from _sqlite3 import * ImportError: DLL load failed: The specified module could not be found.” 错误
- html - 使用 Vue 有条件地禁用文本框
- r - 并非所有值都在 R 中的 DataFrame 中更新
- c - XC8 v2.10 C99 中的数组索引类型和警告 (752)
- java - Thymeleaf:无法解析为链接的表达式
- javascript - jQuery - 变量而不是表 id
- kotlin - 我如何才能发现configurations.default.collect 在Gradle 中的含义?