假设我有一个字符串,其中包含我想要分成单个单元的一些单元(可能有也可能没有前缀)。例如,字符串可以包含" Btu(th)"或者" Btu(th).ft"甚至" mBtu(th).ft"其中mBtu(th)是bastardised unit milli thermochemical BTU&s(这纯粹是一个例子)。
我目前有以下(简化)正则表达式,但是它没有用于案例" mBtu(th).ft":
/(m|k)??(Btu\(th\)|ft|m)(?:\b|\s|$)/g
目前,这并未正确检测到Btu(th)'并且' ft的开始。我理解javascript正则表达式不支持回顾所以如何准确地解析字符串?
答案 0 :(得分:2)
我会尝试:
/(?:(m)|(k)|(Btu)|(th)|(ft)|[\.\(\)])/g
至少在上面的示例中,它匹配合并为一个字符串的所有单元。 DEMO
修改强>
另一次尝试(DEMO):
.
这个只能再匹配一个部分,但是如果你使用$ 1,$ 2,$ 3,$ 4等,(DEMO)你可以提取其他片段。它会忽略(
,)
,/(m|k|Btu|th|ft)/g
,字符。问题是计算适当匹配的组,但它在某种程度上起作用。
或者,如果您接受多个单独的匹配,我认为简单的替代方案是:
class A:
def B(time):
seconds = time
return seconds
seconds = A.B(int)
答案 1 :(得分:0)
单词边界不会分隔两个非单词字符。因此,您实际上并不想要单词边界,因为括号和句点不是有效的单词字符。相反,您希望字符串后面没有单词字符,因此您可以改为使用它:
[mk]??(Btu\(th\)|ft|m)(?!\w)
答案 2 :(得分:0)
我相信你是在追求这样的事情。如果我理解正确的想要匹配任何类型的元素,可能先于m
或k
字符,并用parantheses或点分隔。
/[\s\.\(]*(m|k?)(\w+)[\s\.\)]*/g
https://regex101.com/r/eQ5nR4/2
如果您不关心能够匹配括号但只返回您可以做的元素
/(m|k?)(\w+)/g