Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何为一个单位度量扩展正则表达式以匹配;单位x单位x单位“;也测量吗?_Regex - Fatal编程技术网

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)$
模式匹配

  • ^
    字符串的开头
  • \d{1,2}、\d{1,2}
    匹配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)$
模式匹配

  • ^
    字符串的开头
  • \d{1,2}、\d{1,2}
    匹配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]可能是有用的?