正则表达式多个匹配和$ 1,$ 2变量(快速简单!)

时间:2011-06-28 14:24:59

标签: regex solr

我需要从字符串中提取数字值,例如“17,000英镑 - 35,000英镑,取决于经验”

([0-9]+k?[.,]?[0-9]+)

该字符串只是一个示例,我可以17k 17.000 17 17,000,在每个字符串中可以有0,1或2个数字(不超过2),它们可以在字符串中的任何地方,由其他任何东西分开。我只需要提取它们,把第一个提取到一个地方,把第二个提取到另一个地方。

我可以想出这个,但它在k?[,.]分组中给了我两个匹配(不介意$1,这是正确的)。我需要17,000中的$135,000中的$2,我该如何做到这一点?我也可以设法使用2个不同的正则表达式

3 个答案:

答案 0 :(得分:1)

使用正则表达式

使用每个开始圆括号,您可以创建一个新的捕获组。因此,要拥有第二个捕获组$2,您需要将第二个数字与括号内的正则表达式的另一部分相匹配,当然您需要匹配数字之间的部分。

([0-9]+k?[.,]?[0-9]+)\s*-\s*.*?([0-9]+k?[.,]?[0-9]+)

请参阅here on Regexr

但可能是Solr具有将所有匹配放入数组的正则表达式函数,这可能更容易使用。

答案 1 :(得分:0)

将整个美元区间与2个捕获组匹配,而不是将每个美元金额与一个捕获组匹配:

([0-9]+k?[.,]?[0-9]+) - ([0-9]+k?[.,]?[0-9]+)

然而,我很担心(是的,我在意它:p)关于那个正则表达式,因为它会匹配一些奇怪的东西:

182k,938 - 29.233333

将匹配,如果您可以提供有关输入类型的更多信息,它肯定可以改进。

答案 2 :(得分:0)

的内容如何?
[£]?([0-9]+k?[.,]?[0-9]+) - [£]([0-9]+k?[.,]?[0-9]+)

现在应该给你两组。

编辑:可能还需要清理空格