我有一个正则表达式,主要用于查找字符串中的测量值(安培、瓦特或伏特)。字符串长度最多为80个字符。下面是我使用的正则表达式:
(?<![a-zA-Z])[\-\s\(,\n=]?([0-9?\.?]+\-?)\s?(amps|volts|watts|volt|amp|watt|a|v|w){1}(?![a-zA-Z]+)
我之所以在单元的规范中如此具体,是因为当我尝试将它放入python的re模块时,如果我使用类似watt(s)?
的东西,它会出错。它将返回在字符串中找到的随机“s”字符。另外,我使用这么多捕获组的原因是,当我使用re.findall()
时,它返回捕获组,因此我可以轻松地处理数据。我还使用了不区分大小写的标志
这是我遇到的问题的一个例子,如下表所示:
| String | Result |
|------------|----------|
| E2A | 2 Amps |
| ESQ45A | 5 Amps |
| JW795A | 795 Amps |
它会触发这些,即使后面的人会看到前面有一个字母。有没有办法让regex停止查找,因为lookback被触发了?我不能使用^
字符,因为这些字符串很少位于字符串的开头
这是regex101 link with a few more examples。T型
这些不应该匹配:
ESQ45A
JW795A
SO15A
SQ18W
SQQ10W
AK10V
这些应匹配:
XYZ 5 amps
1 V
1123 w
5 Volt
1234 amp
从例子来看,你需要使用
参见regex demo
\b
-单词边界(\d*\.?\d+)
-group1:一个整数或类浮点数\s*
-0+空格字符(a(?:mps?)?|v(?:olts?)?|w(?:atts?)?)
-第2组:a
、v
、w
、amp
、amps
、volt
、volts
、watt
或watts
\b
-单词边界李>注意,
\d*\.?\d+
匹配0.12
、.12
和112
值,您可以使用\d+(?:\.\d+)?
来避免匹配类似.12
的值如果数字和度量单位之间有一个或多个空格,请将
\s*
替换为\s+
。您可以使用[\s=-]
这样的字符类在这里添加更多字符(例如,添加=
和-
)。欢迎进一步定制相关问题 更多 >
编程相关推荐