Regex 如何为一个单位度量扩展正则表达式以匹配;单位x单位x单位“;也测量吗?
出于文本清理的目的,我创建了一个小正则表达式来匹配数字和度量单位(在巴西使用): 但我不知道如何扩展它以匹配:Regex 如何为一个单位度量扩展正则表达式以匹配;单位x单位x单位“;也测量吗?,regex,Regex,出于文本清理的目的,我创建了一个小正则表达式来匹配数字和度量单位(在巴西使用): 但我不知道如何扩展它以匹配: 1,3x1,0x0,7cm 我该怎么做?这可能是最短的答案: ^(\d{1,2},?x?)+(cm|m(²|2)?|kg)$ 这可能是最短的答案: ^(\d{1,2},?x?)+(cm|m(²|2)?|kg)$ 也许是这样的 ^\d{1,2},\d{1,2}(x\d{1,2},\d{1,2}){,2}(cm|m(²|2)?|kg)$ 也许是这样的 ^\d{1,2},\d{1,
1,3x1,0x0,7cm
我该怎么做?这可能是最短的答案:
^(\d{1,2},?x?)+(cm|m(²|2)?|kg)$
这可能是最短的答案:
^(\d{1,2},?x?)+(cm|m(²|2)?|kg)$
也许是这样的
^\d{1,2},\d{1,2}(x\d{1,2},\d{1,2}){,2}(cm|m(²|2)?|kg)$
也许是这样的
^\d{1,2},\d{1,2}(x\d{1,2},\d{1,2}){,2}(cm|m(²|2)?|kg)$
可选地为添加的
1,3x1,0x
匹配一种格式,您可以将替换(²| 2)
缩短为一个字符类[²2]
匹配列出的字符中的一个
^\d{1,2},\d{1,2}(?:(?:x\d{1,2},\d{1,2}){2})?(?:cm|m[²2]?|kg)$
模式匹配
字符串的开头^
匹配1-2位\d{1,2}、\d{1,2}
和1-2位、
可以选择匹配额外的(?:(?:x\d{1,2}、\d{1,2}){2})
模式1,3x1,0x
非捕获组匹配其中一个备选方案(?:cm | m[²2]?| kg)
字符串结尾$
它不在示例数据中,但如果示例
2kg
中没有小数部分,则使用\d{1,2},\d{1,2}
不匹配。在这种情况下,您可以使用\d{1,2}(?:,\d{1,2})
使该部分成为可选的,并且可以选择匹配添加的1,3x1,0x
的格式,并且您可以将替换(²| 2)
缩短为匹配所列字符中的1个字符的字符类[2]
^\d{1,2},\d{1,2}(?:(?:x\d{1,2},\d{1,2}){2})?(?:cm|m[²2]?|kg)$
模式匹配
字符串的开头^
匹配1-2位\d{1,2}、\d{1,2}
和1-2位、
可以选择匹配额外的(?:(?:x\d{1,2}、\d{1,2}){2})
模式1,3x1,0x
非捕获组匹配其中一个备选方案(?:cm | m[²2]?| kg)
字符串结尾$
它不在示例数据中,但如果示例
2kg
中没有小数部分,则使用\d{1,2},\d{1,2}
不匹配。在这种情况下,您可以使用\d{1,2}(?:,\d{1,2})?
使该部分成为可选的。您的初始正则表达式假定所有数字后面都有一个单位。在多维测量中情况并非如此,在多维测量中,一整套数字后面跟着一个单位。(我们将忽略以下事实:XxYxZcm
是XcmxYcmxZcm
的可疑缩写)
此外,我将从度量的正则表达式中省略^
和$
,并仅在最终匹配字符串时添加它们
>>重新导入
>>>数字=r'\d{1,2},\d{1,2}'
>>>单位=r'(厘米|米(平方米)|千克)
>>>度量值=f'({number})(x({number}))*{unit}'
>>>关于匹配(rf'^{measurement}$',“1,3cm”)
>>>关于匹配(rf'^{measurement}$',“1,3x1,0x0,7cm”)
初始正则表达式假定所有数字后面都跟有一个单位。在多维测量中情况并非如此,在多维测量中,一整套数字后面跟着一个单位。(我们将忽略以下事实:XxYxZcm
是XcmxYcmxZcm
的可疑缩写)
此外,我将从度量的正则表达式中省略^
和$
,并仅在最终匹配字符串时添加它们
>>重新导入
>>>数字=r'\d{1,2},\d{1,2}'
>>>单位=r'(厘米|米(平方米)|千克)
>>>度量值=f'({number})(x({number}))*{unit}'
>>>关于匹配(rf'^{measurement}$',“1,3cm”)
>>>关于匹配(rf'^{measurement}$',“1,3x1,0x0,7cm”)
您的扩展版本的规范不清楚,但是^\d{1,2},(?:\dx\d,){0,2}\d{1,2}(cm | m(²| 2)| kg)$
或^\d{1,2},(?:\dx\d,){2}\d{1,2}(cm | m | 2)| kg)$
天真地适用于您的案例。这就是你要找的吗?可能是^\d*,(\d*([x]\d*)?,)*\d*(厘米(平方米)2?千克)$
?这项增加了<代码>(\d*([x\d\d..[x\d.[x\d...**),,)这一代码>将匹配0或更多的[数字(s),然后一个<代码>x代码>然后数字]可能是有用的?规格为你的扩展版可能是有用的?规格为你的扩展版还不清楚,但你的扩展版的规格不清楚,但你的扩展版的规格为不清楚,但<代码>目前还不清楚,但<代码为你的扩展版的扩展版不清楚,但,但<代码为你的扩展版是不清楚,但<代码>目前还不清楚,但<代码为你的扩展版是不清楚,但<代码>目前还不清楚,但<代码为不清楚,但,但<代码>是不清楚,但<代码>码码码码,但<码码码码码码码码码码码码码码码码为1,1,1,1.2,但,但)$在您的案例中非常有效。这就是你要找的吗?可能是^\d*,(\d*([x]\d*)?,)*\d*(厘米(平方米)2?千克)$
?这将添加(\d*([x]\d*)?,)
,它将匹配0个或多个[digit(s),然后一个x
,然后是digits]可能是有用的?