正则表达式 - 查找可选参数

时间:2017-05-21 03:55:42

标签: regex

我想写一个正则表达式来提取参数和操作符号,如果给定或只是提取给定公式中的值。

 "=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

我尝试对我的脚本进行一些修改但到目前为止没有任何成功。

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

尝试

 =(.*)(\/)(.*)|=(.*)

如果你要使用" /" deliminator

答案 1 :(得分:1)

尝试这个最简单的一个,希望这会有所帮助。您可以在不同的地方添加()以捕获不同组中的所有匹配项。

Regex demo

正则表达式: \d+[+*\/-]?\d+

  

1。 [+*\/-]?匹配+-/*任何这些操作,{ {1}}使其成为可选项。

     

2. ?这会将数字与一位或多位数相匹配。

答案 2 :(得分:0)

你的意思是这样的吗?我以为它只是数字。

=\d+[+\-*\/]?\d+

Regex Demo

如果您想使用分组:

=(\d+)([+\-*\/])?(\d+)

Regex Demo

如果您不想匹配,请删除=

答案 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

如果我根据发现的多个组使用正则表达式,我可以很容易地找出所用公式的类型,从而提取组中提供的所有值。