繁体   English   中英

正则表达式匹配数字组后跟或不跟空格,单词

[英]Regex match groups of digits followed or not by spaces, words

我正在尝试匹配正则表达式:

101.6 x 101.6 mm
150   x      150 mm
490 x 100 x 380 mm
490 x 100 x 380 x 430 mm
280mm x 260 mm

并将值(数字)提取为单独的组。 我在用着:

^(?P<value>[-\.\d]+)([\s]*)([x]+) 

但是,我想要一些不关心数字出现多少次的东西。

我想作为团体获得什么:

101.6, 101.6, mm
150, 150, mm
490, 100, 380, mm
490, 100, 380, 430, mm
280, 260, mm

我知道,可以按原样拆分,但除了上面的示例之外,我还有其他包含“x”的表达式,在这种情况下我不想拆分。

鉴于示例数据中所有以mm结尾的字符串和mm也可能选择性地出现在数字之后,您可以匹配一个可选的出现并使用正向先行断言字符串也以mm结尾并且介于两者之间的是只允许部分。

如果你想匹配多个空格,为了清楚起见,你可以在这种情况下使用[ ]+和方括号。 如果除了换行符之外还有更多种类的空格,您可以使用[^\S\r\n]*代替。

基于多个空间,您可以使用

\b(?P<value>\d+(?:\.\d+)?)(?: *mm)?(?=(?: +x +\d+(?:\.\d+)?)* mm\b)

正则表达式演示| Python演示

例如

import re

regex = r"\b(?P<value>\d+(?:\.\d+)?)(?: *mm)?(?=(?: +x +\d+(?:\.\d+)?)* mm\b)"

test_str = ("101.6 x 101.6 mm\n"
    "150   x      150 mm\n"
    "490 x 100 x 380 mm\n"
    "490 x 100 x 380 x 430 mm\n"
    "280mm x 260 mm")

print(re.findall(regex, test_str))

Output

['101.6', '101.6', '150', '150', '490', '100', '380', '490', '100', '380', '430', '280', '260']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM