首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >,正则表达式HasNext从空行开始,支持多平台。

,正则表达式HasNext从空行开始,支持多平台。
EN

Stack Overflow用户
提问于 2012-11-05 13:02:20
回答 1查看 331关注 0票数 1

我需要在Unix和Windows上处理以下文件:

代码语言:javascript
复制
a;b
c;d;e;f;g
c;d;e;f;g
c;d;e;f;g

a;b
c;d;e;f;g
c;d;e;f;g
c;d;e;f;g

a;b

a;b
c;d;e;f;g
c;d;e;f;g
c;d;e;f;g

我需要处理包含底层数据块的a;b。第三个a;b不应该被处理。

目前,我正在使用以下正则表达式来分隔--使用Java扫描仪在文件中使用这种类型的文本:

代码语言:javascript
复制
Scanner fileScanner = new Scanner(file);
        try{

            fileScanner.useDelimiter(Pattern.compile("^$", Pattern.MULTILINE));

            while(fileScanner.hasNext()){
                String line;
                while ((line = fileScanner.nextLine()).isEmpty());
                InputStream is = new ByteArrayInputStream(fileScanner.next().getBytes("UTF-8"));
...

这仍然会为第三个a;b委派空输入到ByteArrayInputStream。

Hoe,我可以检查fileScanner.next()的第一行是否为空行,然后执行nextLine()语句和后续的继续语句吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-05 13:04:41

使用regex模式

代码语言:javascript
复制
(?m)^(?:.+(?:\\r?\\n|\\Z)){2,}

它匹配两个或多个非空行,或其他两个或多个(?:...){2,}行,这些行包含一个或多个字符.+,后面跟着字符串\\Z的新行\\r?\\n(?:...|...)结束。

多行修饰符(?m)意味着^匹配每一行的开头,而不仅仅是字符串的开头。

演示:

代码语言:javascript
复制
String str = "...";

Pattern p = Pattern.compile("(?m)^(?:.+(?:\\r?\\n|\\Z)){2,}");
Matcher m = p.matcher(str);
while (m.find()) {
  String match = m.group();
  System.out.println(match);
}

这个演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13232689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档