正则理解

关于正则表达式的一些理解
最近在学习中文分词过程中遇到正则表达式,有一些难点记录一下,目前也只是看了些初级的知识,看到一个讲的比较简明易懂的的博客地址:
初级篇:https://www.cnblogs.com/chuxiuhong/p/5885073.html
中级篇:http://www.cnblogs.com/chuxiuhong/p/5907484.html
还有一个《正则表达式必知必会》的笔记:http://www.cnblogs.com/lmmjblogs/p/5908605.html

遇到的难以理解的地方

向前向后查找

r"(?<=A)XX(?=B)"
		(?<=A)XX表示匹配字符的前面紧跟字符“A”,即匹配其前缀为“A”的“XX”字符;
				AXX中的XX可以被匹配出来,aXX中的XX不能被匹配出来
		XX(?=B)XX表示匹配字符的后面紧跟字符“B”,即匹配其后缀为“B”的“XX”字符;
			XXB中的XX可以被匹配出来,XXb中的XX不能被匹配出来

一句话总结:有"<"符号的是前缀要求,没有是后缀要求。

		标题表示匹配前缀为A且后缀为B的XX

嵌入条件

回溯嵌入条件

?(1):检查第一个回溯引用是否存在。

文本:123-456-7890
     	  (123)456-7890
          (123)-456-7890
          (123-456-7890
         1234567890
         123 456 7890
     
     正则表达式:(\()?\d{3}(?(1)\)|-)\d{3}-\d{4}
     
     结果:123-456-7890     #匹配成功
     	  (123)456-7890   #匹配成功
    	  (123)-456-7890    #失败
     	  (123-456-7890    #失败
     	  1234567890     #失败
     	  123 456 7890    #失败

个人理解:(     \(      )?      \d{3}     (    ?(1)          \)|-   )   \d{3}-\d{4}
	       转义表示括号                       检查前面       是匹配“)”    匹配“3个数字-4个数字”
	      匹配0个或1个括号    匹配3个数字     是否匹配了“(”     否匹配“-”
前后查找条件

(?(前后查找表达式))

文本:11111
    22222
    33333-
    44444-4444
    
正则表达式:\d{5}(?(?=-)-\d{4})
结果:11111   #成功
     22222   #成功
     33333-   #失败
     44444-4444   #成功
     
个人理解:\d{5}     (    ?(?=-)       -\d{4}    )
	  匹配5个数字     后缀是否为“-”   是则匹配“-4个数字”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值