cdzjf 发表于 2022-5-27 16:48:41

正则匹配可否从字符串最后一个向前来匹配?

本帖最后由 cdzjf 于 2022-5-27 19:57 编辑

比如这个字符串

u='der=xeke{lseo=83,ue=00;},sleng={elgoeg{elglq=9}lgev}jlegob'

我想匹配最后一个}前面或者后面的所有,但正则是从第一个字符串开始往后匹配,如何可以让他从最后一个往前,匹配到第一个}就不继续匹配了?
或者我需要最后一个}后面的jlegob这些字符串,应该怎样匹配

tiangtian 发表于 2022-5-27 17:29:52

给你个借鉴

用正则表达式匹配网址URL中最后一个反斜杠/后面的内容
测试内容:

http://b174.photo.store.qq.com/psb?/V10CD1yE07IujV/eMbKzb1rzHY56uejjCDlOsR3hhQY53jBobTL7Zh9lUg!/c/dK4AAAAAAAAA&bo=fAF0AAAAAAAFACo!&rf=mood_app
https://www.zhihu.com/question/37415530/answer/118246241?group_id=751055135773331456
http://zhidao.baidu.com/question/185463932.html
http://billmill.org/bloomfilter-tutorial/
http://music.163.com/

测试结果:

共找到 3 处匹配:
dK4AAAAAAAAA&bo=fAF0AAAAAAAFACo!&rf=mood_app
118246241?group_id=751055135773331456
185463932.html

正则表达式:

[^/]+(?!.*/)

解析:

[^/]+ 表示匹配任意长度的字符串,字符串中不包含有字符 / ,可以把以/分割开的字符串全匹配到.

.*/ 表示任意以/ 结尾的字符串,可以把后在带有/的字符串匹配到,前面再加上?!,再用圆括号包住表示排除掉.(?!.*/).
整个表达式的意思就是匹配任意长度的不包含/ 的字符串,并把以/结尾的字符串排除掉.

原文:https://www.cnblogs.com/OneL1fe/p/5796352.html

tiangtian 发表于 2022-5-27 17:30:47

给你个借鉴
用正则表达式匹配网址URL中最后一个反斜杠/后面的内容
测试内容:

http://b174.photo.store.qq.com/psb?/V10CD1yE07IujV/eMbKzb1rzHY56uejjCDlOsR3hhQY53jBobTL7Zh9lUg!/c/dK4AAAAAAAAA&bo=fAF0AAAAAAAFACo!&rf=mood_app
https://www.zhihu.com/question/37415530/answer/118246241?group_id=751055135773331456
http://zhidao.baidu.com/question/185463932.html
http://billmill.org/bloomfilter-tutorial/
http://music.163.com/

测试结果:

共找到 3 处匹配:
dK4AAAAAAAAA&bo=fAF0AAAAAAAFACo!&rf=mood_app
118246241?group_id=751055135773331456
185463932.html

正则表达式:

[^/]+(?!.*/)

解析:

[^/]+ 表示匹配任意长度的字符串,字符串中不包含有字符 / ,可以把以/分割开的字符串全匹配到.

.*/ 表示任意以/ 结尾的字符串,可以把后在带有/的字符串匹配到,前面再加上?!,再用圆括号包住表示排除掉.(?!.*/).
整个表达式的意思就是匹配任意长度的不包含/ 的字符串,并把以/结尾的字符串排除掉.

原文地址:https://www.cnblogs.com/OneL1fe/p/5796352.html

当初约定 发表于 2022-5-27 20:14:20

给你看看这个https://www.runoob.com/regexp/regexp-syntax.html
{:10_256:}

qq1151985918 发表于 2022-5-28 14:06:06

你把字符串反转一下不就好了?s[::-1]

cdzjf 发表于 2023-1-1 10:23:53

qq1151985918 发表于 2022-5-28 14:06
你把字符串反转一下不就好了?s[::-1]

你这个其实效果是一样的,不信你代进去试试看

suchocolate 发表于 2023-1-1 10:36:47

没太明白,你直接把想要的结果贴出来

阿奇_o 发表于 2023-1-1 12:28:15

看你描述,似乎不用正则,也可以s = "u='der=xeke{lseo=83,ue=00;},sleng={elgoeg{elglq=9}lgev}jlegob'"
s
'jlegob'

cdzjf 发表于 2023-1-13 21:32:20

suchocolate 发表于 2023-1-1 10:36
没太明白,你直接把想要的结果贴出来

SUTYGKu5KJxyPKH+ynt2XyXCzxwad6tby7fq/9lse0AsafXald0B9jti+DVWpPmVJumriRWx9Z9/8ULAn2tquYruz2hvdxBRkEv0k2dr 6AYkw1JygLu5hLWQrpfokF82sFj8jvxN3TCX4ePI9wCUQNrw/v/2GtUZ15OaTPLenNc8Dj8eIm/YxEgn+PjRB1CkfhWzgko8Z7TryEsJeSbyvnnaBT4xh8AOH8NtRtJCw2chDJhogzJ6R+KtOrjPeOEAJqCJw23ePd9CMvQyhcKa33FDZ2McOlipm0y5WwUTTryDjF/9/W

+abkKywHuzhdmEdWxXk6PEygLTXTEYgg4/UBGb/ShPr8aazAGZAOpHMbid7N56xJF5AFVyyDNmFWgZtn01M1tEsrsLMBMX877G23oPaJXENlHsWAIf8wVncoG0QWymsfKEBYVwHyC5uFrZD/1HXO+GXTj4FuXL6//7Ixt3FBCrWZ+fRLvIaLkqBRYd2mWOsrR8nCKZ0XqvL3miKcwxPymW6F+ljpga46NOo7Y4wU7Q5OGKCBNBHh/33F1JigVj3BFcr2+eQf5J+2zHX9/BpCsFdUUlcNXSUTYGh9EBU4dt9aSUlvlDsoqg225wrNuE5zUOGzJ1KZCPF8IskGylQTFlDH4oM73pnwPrHkH+n/7uuWwF/Xmtj7htp9/6ldDtx00w30qG34U9CSFfl5CsMg0wf2pO06PjXI7f5XDpAaOBDf02aWouY03LfLmCVTQ9WkEmRmD/uoymwR3BaHLY9TF/jlfPhTkqNG4b+0XFPMl7DKyvMagujqUCqan/whQn8c

nXGvBnRX/HGjNGcvMOtusXLMH3JAD7YWNx3kQqaTdhHun2FUM6BdBWFzCMkLnRcY7dsjdcUM4XGnRg9OKJbqwFGVE6Lcpx3Ev1J
SUTYGLsAiGdvb6wgyogfU+uo5pGjIZ72jKh5tr1cw+wbaBemRBekiRyySn4eBXvMXYrCe59W5S/sRDqYtJow/KYwg4vHEXgcs
bsW+dyZajSQ0SCBnirnSP


就简单说,SUTYG这个有3个,我需要的是字符串中最后一次出现这个后面的一段,也就是我要上面标注的那部分,这个如果我用re.findall方法的话,就要从第一个开始匹配,而且最后那一段还不知道该怎么去匹配,我如果有个办法可从字符串的末尾往前匹配,只要匹配到了SUTYG这个字符串就停止就好了

suchocolate 发表于 2023-1-14 00:04:05

本帖最后由 suchocolate 于 2023-1-14 08:56 编辑

cdzjf 发表于 2023-1-13 21:32
SUTYGKu5KJxyPKH+ynt2XyXCzxwad6tby7fq/9lse0AsafXald0B9jti+DVWpPmVJumriRWx9Z9/8ULAn2tquYruz2hvdxBRkE ...

s = 'your string'
print(s.split('SUTYG')[-1]))   # 原始字符串分隔
print(re.split('SUTYG', s)[-1])# re分隔
print(re.findall('.*SUTYG(.*)$', s))# 匹配结尾,假定你的原字符串是一个整体
页: [1]
查看完整版本: 正则匹配可否从字符串最后一个向前来匹配?