旧帖 | |
---|---|
此部分的内容的旧帖为:【总结】关于(C#和Python中的)正则表达式 |
下面对于各种语言之间的正则表达式的语法,进行简单的比较:
示例代码为: import re; #------------------------------------------------------------------------------ def testBackReference(): # back reference (?P=name) test backrefValidStr = '"group":0,"iconType":"NonEmptyDocumentFolder","id":"9A8B8BF501A38A36!601","itemType":32,"name":"released","ownerCid":"9A8B8BF501A38A36"'; backrefInvalidStr = '"group":0,"iconType":"NonEmptyDocumentFolder","id":"9A8B8BF501A38A36!601","itemType":32,"name":"released","ownerCid":"987654321ABCDEFG"'; backrefP = r'"group":\d+,"iconType":"\w+","id":"(?P<userId>\w+)!\d+","itemType":\d+,"name":".+?","ownerCid":"(?P=userId)"' userId = ""; foundBackref = re.search(backrefP, backrefValidStr); print "foundBackref=",foundBackref; # foundBackref= <_sre.SRE_Match object at 0x02B96660> if(foundBackref): userId = foundBackref.group("userId"); print "userId=",userId; # userId= 9A8B8BF501A38A36 print "can found userId here"; foundBackref = re.search(backrefP, backrefInvalidStr); print "foundBackref=",foundBackref; # foundBackref= None if(not foundBackref): print "can NOT found userId here"; return ; | |
示例代码为: using System.Text.RegularExpressions; void testBackReference() { // back reference \k<name> test string backrefValidStr = "\"group\":0,\"iconType\":\"NonEmptyDocumentFolder\",\"id\":\"9A8B8BF501A38A36!601\",\"itemType\":32,\"name\":\"released\",\"ownerCid\":\"9A8B8BF501A38A36\""; string backrefInvalidStr = "\"group\":0,\"iconType\":\"NonEmptyDocumentFolder\",\"id\":\"9A8B8BF501A38A36!601\",\"itemType\":32,\"name\":\"released\",\"ownerCid\":\"987654321ABCDEFG\""; string backrefP = @"""group"":\d+,""iconType"":""\w+"",""id"":""(?<userId>\w+)!\d+"",""itemType"":\d+,""name"":"".+?"",""ownerCid"":""\k<userId>"""; string userId = ""; Regex backrefValidRx = new Regex(backrefP); Match foundBackref; foundBackref = backrefValidRx.Match(backrefValidStr); if (foundBackref.Success) { // can found the userId userId = foundBackref.Groups["userId"].Value; MessageBox.Show("can found the userId !"); } foundBackref = backrefValidRx.Match(backrefInvalidStr); if (foundBackref.Success) { // can NOT found the userId } else { MessageBox.Show("can NOT found the userId !"); } } | |
示例代码为: import re; #------------------------------------------------------------------------------ def testPrevPostMatch(): # post match: (?=xxx) # post non-match: (?!xxx) # prev match: (?<=xxx) # prev non-match: (?<!xxx) #note that input string is: #src=\"http://b101.photo.store.qq.com/psb?/V10ppwxs00XiXU/5dbOIlYaLYVPWOz*1nHYeSFq09Z5rys72RIJszCsWV8!/b/YYUOOzy3HQAAYqsTPjz7HQAA\" qqPicUrlStr = 'src=\\"http://b101.photo.store.qq.com/psb?/V10ppwxs00XiXU/5dbOIlYaLYVPWOz*1nHYeSFq09Z5rys72RIJszCsWV8!/b/YYUOOzy3HQAAYqsTPjz7HQAA\\"'; qqPicUrlInvalidPrevStr = '1234567http://b101.photo.store.qq.com/psb?/V10ppwxs00XiXU/5dbOIlYaLYVPWOz*1nHYeSFq09Z5rys72RIJszCsWV8!/b/YYUOOzy3HQAAYqsTPjz7HQAA\\"'; qqPicUrlInvalidPostStr = 'src=\\"http://b101.photo.store.qq.com/psb?/V10ppwxs00XiXU/5dbOIlYaLYVPWOz*1nHYeSFq09Z5rys72RIJszCsWV8!/b/YYUOOzy3HQAAYqsTPjz7HQAA123'; canFindPrevPostP = r'(?<=src=\\")(?P<qqPicUrl>http://.+?\.qq\.com.+?)(?=\\")'; qqPicUrl = ""; foundPrevPost = re.search(canFindPrevPostP, qqPicUrlStr); print "foundPrevPost=",foundPrevPost; # if(foundPrevPost): qqPicUrl = foundPrevPost.group("qqPicUrl"); print "qqPicUrl=",qqPicUrl; # qqPicUrl= http://b101.photo.store.qq.com/psb?/V10ppwxs00XiXU/5dbOIlYaLYVPWOz*1nHYeSFq09Z5rys72RIJszCsWV8!/b/YYUOOzy3HQAAYqsTPjz7HQAA print "can found qqPicUrl here"; foundInvalidPrev = re.search(canFindPrevPostP, qqPicUrlInvalidPrevStr); print "foundInvalidPrev=",foundInvalidPrev; # foundInvalidPrev= None if(not foundInvalidPrev): print "can NOT found qqPicUrl here"; foundInvalidPost = re.search(canFindPrevPostP, qqPicUrlInvalidPostStr); print "foundInvalidPost=",foundInvalidPost; # foundInvalidPost= None if(not foundInvalidPost): print "can NOT found qqPicUrl here"; return ; | |
示例代码为: using System.Text.RegularExpressions; void testPrevPostMatch() { //http://msdn.microsoft.com/en-us/library/bs2twtah(v=vs.71).aspx // post match: (?=xxx) // post non-match: (?!xxx) // prev match: (?<=xxx) // prev non-match: (?<!xxx) //src=\"http://b101.photo.store.qq.com/psb?/V10ppwxs00XiXU/5dbOIlYaLYVPWOz*1nHYeSFq09Z5rys72RIJszCsWV8!/b/YYUOOzy3HQAAYqsTPjz7HQAA\" string qqPicUrlStr = "src=\\\"http://b101.photo.store.qq.com/psb?/V10ppwxs00XiXU/5dbOIlYaLYVPWOz*1nHYeSFq09Z5rys72RIJszCsWV8!/b/YYUOOzy3HQAAYqsTPjz7HQAA\\\""; string qqPicUrlInvalidPrevStr = "12345678http://b101.photo.store.qq.com/psb?/V10ppwxs00XiXU/5dbOIlYaLYVPWOz*1nHYeSFq09Z5rys72RIJszCsWV8!/b/YYUOOzy3HQAAYqsTPjz7HQAA\\\""; string qqPicUrlInvalidPostStr = "src=\\\"http://b101.photo.store.qq.com/psb?/V10ppwxs00XiXU/5dbOIlYaLYVPWOz*1nHYeSFq09Z5rys72RIJszCsWV8!/b/YYUOOzy3HQAAYqsTPjz7HQAA1234"; string canFindPrevPostP = @"(?<=src=\\"")(?<qqPicUrl>http://.+?\.qq\.com.+?)(?=\\"")"; string qqPicUrl = ""; Regex prevPostRx = new Regex(canFindPrevPostP); Match foundPrevPost = prevPostRx.Match(qqPicUrlStr); if (foundPrevPost.Success) { qqPicUrl = foundPrevPost.Groups["qqPicUrl"].Value; MessageBox.Show("can found the qqPicUrl !"); } Match foundInvalidPrev = prevPostRx.Match(qqPicUrlInvalidPrevStr); if (!foundInvalidPrev.Success) { MessageBox.Show("can NOT found the qqPicUrl !"); } Match foundInvalidPost = prevPostRx.Match(qqPicUrlInvalidPostStr); if (!foundInvalidPost.Success) { MessageBox.Show("can NOT found the qqPicUrl !"); } } |