首页 > 解决方案 > Python - 正则表达式模式

问题描述

我正在尝试创建将使用像 12X15x2 这样的模式并从这样的字符串中提取它的函数:“STACKED STONE 52X36X72 AREAWELL BOMAN KEMP”所以模式是尺寸绞盘通常是一个或多个数字,“X”比一个或多个数字比“X”,并以一位或多位数字结尾。

这是我尝试过的:

# Importing dependencies
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
import re

# Setting the test string
s = "STACKED STONE 52\"X36\"X72\" AREAWELL BOMAN KEMP"
# Test the pattern on a s string
result = re.sub(r"[a-z ]", "", s , flags=re.I) 
print(result)

结果,我得到 52"36"72 ,它只是用任何内容替换字符串中的字母。

根据我的研究,我认为我必须使用编译函数并定义模式来读取数字字母 X 数字字母 X 数字,所以像 [1-9],"X",[1-9],"X",[ 1-9]

知道如何构造这个以及使用哪个 re 函数吗?

我在下面尝试了一些解决方案,但是我没有捕获每个实例,因为不幸的是我实际上有不止一种格式。这是我必须考虑的所有格式:

 2x5x6 
 2"x5"6"
 2'x5'6'
 2"x5'x6
 1/2"x5/8"x7'

所以每个数字都可以是整数,也可以是 1/2,每个数字都可以以以太英寸或英尺的形式出现。是否可以将其写在一行中,或者我必须创建几个函数来适应每个函数?

标签: pythonregex

解决方案


这应该会有所帮助。

import re

s = "STACKED STONE 52X36X72 AREAWELL BOMAN KEMP"
m = re.search(r"\b(\d+X\d+X\d+)\b", s, flags=re.I)
if m:
    print(m.group(1))

输出:

52X36X72

推荐阅读