regex - 正则表达式匹配字符串中相同子字符串中的最后一个子字符串
问题描述
例如我们有一个字符串:asd/asd/asd/asd/1#s_
我需要匹配这部分:/asd/1#s_ 或 asd/1#s_ 如何使用普通的正则表达式?
我已经尝试过像这样的负前瞻但它没有用
\/(?:.(?!\/))?(asd)(\/(([\W\d\w]){1,})|)$
它与此 'prefix/asd/asd/asd/asd/asd/asd/1#s_' 中的此 '/asd/asd/asd/asd/asd/asd/1#s_' 匹配,我需要匹配 '/asd /1#s_' 没有前面的所有 /asd/'s
匹配应该与普通正则表达式一起使用没有任何编程语言的任何辅助函数 https://regexr.com/ 我使用这个站点来检查正则表达式是否匹配
这是可能的字符串:
prefix/asd/asd/asd/1#s
prefix/asd/asd/asd/1s#
prefix/asd/asd/asd/s1#
prefix/asd/asd/asd/s#1
prefix/asd/asd/asd/#1s
prefix/asd/asd/asd/#s1
并且 asd 部分可以替换为任何单词,例如
prefix/a1sd/a1sd/a1sd/1#s
prefix/a1sd/a1sd/a1sd/1s#
...
所以我需要将最后一个重复部分与右边的所有内容匹配并且右边的所有内容都可以是字符,而不是字符,数字,以任何顺序
一个更复杂的字符串示例:
前缀/a1sd/a1sd/a1sd/1s#/ds/dsse/a1sd/22$$@!/123/321/asd
这应该与该部分匹配:
/a1sd/22$$@!/123/321/asd
解决方案
试试这个。这适用于python。
import re
reg = re.compile(r"\/[a-z]{1,}\/\d+[#a-z_]{1,}")
s = "asd/asd/asd/asd/1#s_"
print(reg.findall(s))
# ['/asd/1#s_']
更新:
由于这个问题不够清晰,这仅适用于给定的顺序,因此,我想任何其他组合都会失败。
编辑:
新正则表达式
reg = r"\/\w+(\/\w*\d+\W*)*(\/\d+\w*\W*)*(\/\d+\W*\w*)*(\/\w*\W*\d+)*(\/\W*\d+\w*)*(\/\W*\w*\d+)*$"
推荐阅读
- python - 如何使用特殊字符从 txt 文件中提取数据?
- c - 当工作线程具有无限的while循环时,为什么要分离工作线程?
- django - SendGrid 邮件发送在我的 django rest-api 视图中不起作用
- python - numpy数组转置创建奇怪的数字
- python-3.x - 如何重新标记 xarry DataArray?
- php - 如何自动将任务状态更新为“逾期”?
- bash - 如何使用 sed 删除非英语语言的非字母数字字符?
- python-3.x - 字符串会话何时到期?
- mongodb - 将现有的 mongo db 属性值添加到更新中的数字许多
- android - React Native - 如何自动从设置返回应用程序?