我想写一个正则表达式来提取参数和操作符号,如果给定或只是提取给定公式中的值。
"=400/500" will find 400, /, and 500
"=400" will find 400
到目前为止,我尝试使用组匹配方法和正则表达式如下:
=(.*)(/|\*|\+|-)(.*)
但是,这并不适用于所有情况。例如,我得到以下内容:
"=400/500" will find 400, /, and 500 which is exactly what I need
"=400" does not find any matches and I expect to get 400
我尝试对我的脚本进行一些修改但到目前为止没有任何成功。
提前感谢您的帮助!
答案 0 :(得分:1)
尝试
=(.*)(\/)(.*)|=(.*)
如果你要使用" /" deliminator
答案 1 :(得分:1)
尝试这个最简单的一个,希望这会有所帮助。您可以在不同的地方添加()
以捕获不同组中的所有匹配项。
正则表达式: \d+[+*\/-]?\d+
1。
[+*\/-]?
匹配+
,-
,/
和*
任何这些操作,{ {1}}使其成为可选项。2.
?
这会将数字与一位或多位数相匹配。
答案 2 :(得分:0)
你的意思是这样的吗?我以为它只是数字。
=\d+[+\-*\/]?\d+
如果您想使用分组:
=(\d+)([+\-*\/])?(\d+)
如果您不想匹配,请删除=
答案 3 :(得分:0)
感谢(。*)回复: - )
您的答案非常快速且富有洞察力。在我原来的问题中,我并不是100%明确,因此人们提供了不同的解决方案。我想利用正则表达式组搜索。表达式主要是公式或赋值操作。例如:
=500 // want to get 500 and understand there is no operator
=500+34 // want to get 500 and 34 and understand the operation is addition
=500/100 // want to get 500 and 100 and understand the operation is division
=500-100 //...
=500*100
这样我可以很容易地提取参数和运算符,或者只是在没有运算符的情况下提取值。我用修改过的Sahil的答案来解决。例如,现在我使用以下内容:
=(\d+)([+*\/-])?(\d+)?
这些是以下输入的结果:
Input string: "=400/500" Result: 0: [0,8] =400/500
1: [1,4] 400
2: [4,5] /
3: [5,8] 500
Input string: "=500" Result: 0: [0,4] =500
1: [1,4] 500
2: [-1,-1] null
3: [-1,-1] null
Input string: "=400/" Result: 0: [0,5] =400/
1: [1,4] 400
2: [4,5] /
3: [-1,-1] null
如果我根据发现的多个组使用正则表达式,我可以很容易地找出所用公式的类型,从而提取组中提供的所有值。