猿问

正则表达式(regex)。如何忽略或排除介于两者之间的所有内容?

我有这个输入文本:


142d  000781fe0000326f BPD    false    65535 FSK_75     FSK_75     -51.984   -48

我想使用正则表达式来提取 000781fe0000326f 和 -51.984,所以输出看起来像这样


000781fe0000326f-51.984

我可以分别使用[0-9]{5,7}(?:[a-z][a-z0-9_]*)and([-]?\\d*\\.\\d+)(?![-+0-9\\.])来提取000781fe0000326fand -51.984。有没有办法忽略或排除000781fe0000326f和之间的所有内容-51.984?要忽略非贪婪填充符 (.*?) 将捕获的所有内容?


String ref="[0-9]{5,7}(?:[a-z][a-z0-9_]*)_____([-]?\\d*\\.\\d+)(?![-+0-9\\.])";


            Pattern p = Pattern.compile(ref,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);

            Matcher m = p.matcher(input);

            while (m.find())

            {

                String all = m.group();

                //list3.add(all);

            }      


FFIVE
浏览 417回答 1
1回答

森栏

对于示例数据,您可以使用交替 |来匹配您问题中的任一正则表达式,然后将它们连接起来。请注意,在您的正则表达式中,您可以编写(?:[a-z][a-z0-9_]*)as[a-z][a-z0-9_]并且不必转义字符类中的点。例如:[0-9]{5,7}[a-z][a-z0-9_]*|-?\d*\.\d+(?![-+0-9.])String regex = "[0-9]{5,7}[a-z][a-z0-9_]*|-?\\d*\\.\\d+(?![-+0-9.])";String string = "142d  000781fe0000326f BPD    false    65535 FSK_75     FSK_75     -51.984   -48";Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);Matcher matcher = pattern.matcher(string);String result = "";while (matcher.find()) {                result += matcher.group(0);}System.out.println(result); // 000781fe0000326f-51.984
随时随地看视频慕课网APP

相关分类

Java
我要回答