正则表达式,用于从字符串中提取尺寸,例如"高 7 厘米(2 英寸)、长 9 厘米(3 英寸)和宽 7 厘米(2 英寸)



我正在尝试从未格式化的字符串描述中提取数据集中项目的物理尺寸。它们在字符串中的表达方式有很多种。以下是一些示例:

2” (7cm) high, 3” (9cm) long and 2” (7cm) wide
7” (20cm) high, 5” (15cm) wide and 5” (13cm) deep
4” high, 7” wide and 5” deep
6 inches high, 17 inches wide, and 6 inches deep

理想情况下,我正在尝试以最优雅的方式提取它们,为每个维度只使用一个正则表达式,但我似乎无法弄清楚如何做到这一点,我什至不知道从哪里开始,真的。我正在使用熊猫数据帧和 extract(( 方法,如果这有所作为的话。这是我到目前为止所拥有的:

r'(?P<height_cm>d+)cm) high'
r'?P<width_cm>d+)cm) wide'
r'(?P<length_cm>d+)cm) [deep|long]'

但这显然只捕获了厘米数字。如果存在英寸,我如何也能捕获英寸?我如何使用英寸符号或英寸一词使它们都匹配?

任何帮助将不胜感激。

下面给出的例子(假设深度和长度是相同的维度(:

(?:(?:((?:(?P<height_inch>d+)(?:”| inches))(?: ((?P<height_cm>d+)(?:s?cm)))? high)|((?:(?P<deep_inch>d+)(?:”| inches))(?: ((?P<deep_cm>d+)(?:s?cm)))? (?:deep|long))|((?:(?P<wide_inch>d+)(?:”| inches))(?: ((?P<wide_cm>d+)(?:s?cm)))? wide)).*?)+

编辑:上面的正则表达式更新为与re.fullmatchSeries.str.extractall一起使用

这个可能更容易使用:

((?:(?P<inch>d+)(?:”| inches))(?: ((?P<cm>d+)(?:s?cm)))? (?P<side>high|wide|deep|long))

也可与Series.str.extractall一起使用

在正则表达式101上

请注意,这些正则表达式还将匹配格式为x inches (ycm)的字符串。我认为这不是问题。

r'(?P<height_inches>d+)(”|sinches)(((P<height_cm>d+)scm))?shigh'
r'(?P<width_inches>d+)(”|sinches)(((P<width_cm>d+)scm))?swide'
r'(?P<length_inches>d+)(”|sinches)(((P<length_cm>d+)scm))?s(deep|long)'

最新更新