正则表达式,提取多个数值中的某一个怎么写

比如

内容1:[8175.6,0.0085],[8175.1,0.55],[8175,2.5],[8174.9,1.5],[8174.8,0.814],[8172.1,0.2],[8171.8,0.356],[8171.6,1.32],[8171.5,0.8],[8171.2,0.0615],[8171.1,0.0025],[8170.9,0.2],[8170.2,0.5],[8169.7,0.3843],[8169.6,0.6858],[8169.4,1.836],[8169.2,0.4],[8168.9,0.5152],[8168.8,0.2],[8167.9,0.4],[8167.8,0.4],[8167.5,0.3396],[8165.3,0.2423],[8165.2,0.2],[8165.1,11.1044]

内容2:[8165,8.8056], [8164.9,0.0864], [8164.7,0.48], [8164,0.48], [8163.3,0.0911], [8162,0.009], [8161.7,0.003], [8161.4,4.3], [8161.3,3], [8161,0.55], [8160.8,0.4], [8160.7,0.4], [8160,5.8816], [8159.8,13.0436], [8159.3,0.02], [8159.1,0.0433], [8159,0.4], [8158.8,0.0705], [8158.7,0.4], [8158.5,2.5013], [8156.2,12.5], [8155.3,0.02], [8155.1,0.9989], [8155,11.102], [8153.4,1]

取内容1中第一个数值:8175.6,0.0085 或[8175.6,0.0085]
取内容2中第一个数值:8165,8.8056 或[8165,8.8056]

表达式该怎么写?如果是取最后一个数值,或者其中某个数值呢?
谢谢各位帮忙,十分感激

\[\d+(\.\d+)?,\d+(\.\d+)?\]   这是匹配一个  类似[8175.6,0.0085]格式字符串的正则表达式

如果你要取第1个数值

\[(\d+(\.\d+)?,\d+(\.\d+)?)\]  这样就可以了,匹配结果的第一组$1就是8175.6,0.0085

如果你要取第5个数值则可以这样

(\[\d+(\.\d+)?,\d+(\.\d+)?\],){4}\[(\d+(\.\d+)?,\d+(\.\d+)?)\]   这时匹配结果的第四组$4是你要的结果

取第7个数值则 (\[\d+(\.\d+)?,\d+(\.\d+)?\],){6}\[(\d+(\.\d+)?,\d+(\.\d+)?)\]  ,依然是结果的第四组是你要的结果

以此类推

如果是取最后一个

(\[\d+(\.\d+)?,\d+(\.\d+)?\],)*\[(\d+(\.\d+)?,\d+(\.\d+)?)\] 依然是取结果的第四组

java代码示例

public class Demo {
    public static void main(String[] args) {
        String str = "[8175.6,0.0085],[8175.1,0.55],[8175,2.5],[8174.9,1.5],[8174.8,0.814],[8172.1,0.2],[8171.8,0.356],[8171.6,1.32],[8171.5,0.8],[8171.2,0.0615],[8171.1,0.0025],[8170.9,0.2],[8170.2,0.5],[8169.7,0.3843],[8169.6,0.6858],[8169.4,1.836],[8169.2,0.4],[8168.9,0.5152],[8168.8,0.2],[8167.9,0.4],[8167.8,0.4],[8167.5,0.3396],[8165.3,0.2423],[8165.2,0.2],[8165.1,11.1044]";

        Pattern pattern1 = Pattern.compile("\\[(\\d+(\\.\\d+)?,\\d+(\\.\\d+)?)\\]");
        Matcher matcher1 = pattern1.matcher(str);
        if (matcher1.find()) {
            System.out.println("第一个:" + matcher1.group(1));  // 8175.6,0.0085
        }

        Pattern pattern2 = Pattern.compile("(\\[\\d+(\\.\\d+)?,\\d+(\\.\\d+)?\\],){4}\\[(\\d+(\\.\\d+)?,\\d+(\\.\\d+)?)\\]");
        Matcher matcher2 = pattern2.matcher(str);
        if (matcher2.find()) {
            System.out.println("第五个:" + matcher2.group(4));  // 8174.8,0.814
        }
        
        Pattern pattern3 = Pattern.compile("(\\[\\d+(\\.\\d+)?,\\d+(\\.\\d+)?\\],)*\\[(\\d+(\\.\\d+)?,\\d+(\\.\\d+)?)\\]");
        Matcher matcher3 = pattern3.matcher(str);
        if (matcher3.find()) {
            System.out.println("最后一个:" + matcher3.group(4));  // 8165.1,11.1044
        }
    }
}

追问

小白一枚,还请见谅

试了下,\[\d+(\.\d+)?,\d+(\.\d+)?\]   ,取第一个数值没问题

(\[\d+(\.\d+)?,\d+(\.\d+)?\],)*\[(\d+(\.\d+)?,\d+(\.\d+)?)\] ,取到的值是所有数值,而不是独立数值,我想要的是独立的最后一个数值

请问可以实现吗,我要匹配的环境不支持java语法,就是简单的正则表达就行

追答

没用过你图中的工具,不知道该工具能不能取正则的第几组以及怎么设置
正则表达式有一个分组的概念,你的工具默认取的是匹配的全部结果。我表述中也说了要取第4组的值,才是最终你想要的值。不知道你的工具里怎么设置取第几组
你看我的代码里有 matcher3.group(4) 这就是取的第4组,取出来的就你要的最后一个数值
而你的工具默认取出来的是 matcher3.group() 没有设置分组,所以是全部。
就像第一个数值一样,如果取第一组是 matcher1.group(1) 8175.6,0.0085 中括号也是给你去掉了的。如果取是 matcher1.group() 则是 [8175.6,0.0085]

温馨提示:内容为网友见解,仅供参考
无其他回答

正则表达式,提取多个数值中的某一个怎么写
如果你要取第1个数值 \\[(\\d+(\\.\\d+)?,\\d+(\\.\\d+)?)\\] 这样就可以了,匹配结果的第一组$1就是8175.6,0.0085 如果你要取第5个数值则可以这样 (\\[\\d+(\\.\\d+)?,\\d+(\\.\\d+)?\\],){4}\\[(\\d+(\\.\\d+)?,\\d+(\\.\\d+)?)\\] 这时匹配结果的第四组$4是你要的...

正则提取中间的内容?
正则表达式是一种文本模式匹配工具,可以用来提取文本中的指定信息。如果你想使用正则表达式来提取上面的文本中的【Default9】,可以使用下面的正则表达式:这个表达式会匹配文本中以 Dialogue: 开头,后面跟着任意字符,然后以一个逗号结尾的部分。它会提取括号中的内容,即【Default9】。例如,在使用 Python ...

用正则表达式提取下面字符串里面的指定内容
arr = []arr = r'({{)(.+?)(.DATA)'arr[0][1] = ['first'] 不知题主是什么想法,思想已经写出来了 那么我就贴完整的代码,考虑以下题主:import res = '内容{{first.DATA}}办理单位:{{keyword1.DATA}}办理时间:{{keyword2.DATA}}办理情况:{{keyword3.DATA}}{{remark.DATA}}...

怎样用Python提取文本中某一段文字
可以用正则或者切片。处理大文本用正则,效率高。简单提取的话用切片就行了。取出“test”四个字母,需要找前后的标识符,这里可以看做是“one”和“text”中间的字符。1、切片使用方法(注意冒号):text = 'onetesttext123'right = text[text.find('one') + 3:] # right 结果为“testtext1...

如何用正则表达式提取指定位数内容
原理:匹配需要匹配第N个数字时,(数字+非数字)N-1次+数字,最后的数字即为结果。提取第四个数字(?:\\d+[^\\d\\r\\n]+){3}(\\d+).*\\b{3}的3=4-1提取第二个数字:(?:\\d+[^\\d\\r\\n]+){1}(\\d+).*\\b{1}的1=2-1如果上面数值提取是一行一次匹配 ...

正则表达式,提取括号内的内容
这个是PHP 里的,提取() 的内容关键是特殊字符 ()要用 \\ 来释义。\\((.*)\\) \\( 和 \\) 表示 (A-第一组.ASM) 两边的小括号,用\\ 来释义了。中间的(.*) 就是表示提取的部分,也就是 "A-第一组.ASM" 这些在()中间的字符。 至于要不要加界定符 \/ 就看你用...

正则表达式,取数字,和字母
如果都是这样类似的数据的话,第一个:\\d+或者\\d{8}就行了。第二个: 去掉开始的两个字母,不用正则也可实现啊。假设a=CN85101165(A),那么结果为:b=right(a,len(a-2))

js 正则表达式提取某一段字符
END END END";str=str.replace(\/\\s\/g,"");\/\/取掉空格str=str.match(\/IF(\\S*)THEN\/)[1];\/\/正则取出IF和THEN之间的字符串str=str.split("&&");\/\/按照&&分组var str_end=str[0].split('>'); \/\/按照>分组alert(str_end);\/\/最终结果为str_end[0]=a str_end[1]=10 ;...

c# 正则表达式 提取%要提取的内容%中间的字符串,不要求贪婪匹配,请问...
Regex.Match(string, "(?<=:%)[^%]+(?=% )"); \/\/取 :% 和 % 之间的字符

python正则表达式提取多个匹配内容
替换掉不就行咯,像这样:re.sub(r'<[A-Z]+>',' ',‘<SPAN><P>eng li aas<SS>ddde<AP>iiiiideeeeef<P> ’)或者:>>> ' '.join(re.split(r'<[A-Z]+>','<SPAN><P>eng li aas<SS>ddde<AP>iiiiideeeeef<P>'))' eng li aas ddde iiiiideeeeef '>>> ...

相似回答