Java正则表达式——分组与捕获
来源:互联网 发布:用户提高淘宝搜索质量 编辑:程序博客网 时间:2024/06/06 20:33
今天处理语料的时候,遇到了问题,问题如下:一些标注好的标有艺术家、歌曲名、专辑名等的音乐评论的帖子,例如:<artist>Smile</artist>组合继第一张专辑《<album>Smile</album>》之后又推出的一张舞曲大碟。我想在这样含有两个不同标注实体(艺术家、专辑名)的的句子当中统计动词的频率。
X,至少 n 次,但是不超过 m 次
但是我们如果要对多个字符进行重复怎么办呢?此时我们就要用到分组,我们可以使用小括号"()"来指定要重复的子表达式,然后对这个子表达式进行重复,例如:(abc)? 表示0个或1个abc 这里一个括号的表达式就表示一个分组。
捕获组
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
1 ((A)(B(C)))2 \A3 (B(C))4 (C)
组零始终代表整个表达式
之所以这样命名捕获组是因为在匹配中,保存了与这些组匹配的输入序列的每个子序列。捕获的子序列稍后可以通过 Back 引用在表达式中使用,也可以在匹配操作完成后从匹配器检索。
非捕获组
这四个非捕获组用于匹配表达式X,但是不包含表达式的文本。
举例:
-
Pattern "(?<!c)a(\\d+)bd");p = Pattern.compile( -
Matcher "da12bca3434bdca4343bdca2m = p.matcher( 34bm" ); -
while(m.find()){ -
System.out.println(m.group( -
System.out.println(m.group(0)); // 0组是整个表达式,看这里,并没有提炼出(?<!c)的字符 。结果 a3434bd -
}
最后用了两种方法解决:
解法一:比较笨的方法,没有使用非捕获组:
解法二:使用非捕获组
一个正则表达式就可解决。
再次印证了正则表达式的重要性。
- Java正则表达式——分组与捕获
- Java正则表达式——分组与捕获
- Java正则表达式——分组与捕获
- Java正则表达式——分组与捕获
- JAVA正则表达式高级用法(分组与捕获)
- JAVA正则表达式高级用法(分组与捕获)
- JAVA正则表达式高级用法(分组与捕获)
- JAVA正则表达式高级用法(分组与捕获)
- JAVA正则表达式高级用法(分组与捕获)
- JAVA正则表达式高级用法(分组与捕获)
- java正则表达式之捕获分组与Back引用
- JAVA正则表达式高级用法(分组与捕获)
- 正则表达式高级用法(分组与捕获)
- java 高级正则表达式 分组 捕获 引用
- 正则表达式捕获分组
- 正则表达式——分组/不捕获/断言/其他
- JavaScript正则表达式分组模式:捕获性分组与非捕获性分组及前瞻
- 正则表达式分组捕获说明
- eclipse编辑中的撤销操作
- Vim使用技巧
- 导出数据表到文件(excel、word等)
- 关于数据批量入库解决方案
- Android 筆記-Linux Kernel SMP (Symmetric Multi-Processors) 開機流程解析 Part(3) Linux 多核心啟動流程從rest_init到ker
- Java正则表达式——分组与捕获
- 补上一个BroadcastReceiver实例
- 欢迎光临我的博客
- Android Handler简介及使用 HandlerThread的使用
- 为什么Windows Phone 7不支持C++?
- wav文件格式分析详解和解析代码
- RHEL5 实现高可用HA集群+GFS+EnterpriseDB
- RHEL5上GFS配置磁盘柜共享的方法
- 配置 Eclipse CDT + MSVC + CMake