当前位置: 首页 > 知识库问答 >
问题:

Regex匹配字符串中相同子字符串中的最后一个子字符串

潘秦斩
2023-03-14

例如,我们有一个字符串:asd/asd/asd/1#s_

我需要匹配以下部分:/asd/1#s_或asd/1#s_如何使用普通正则表达式?

我试过像这样的消极前瞻,但它不起作用

\/(?:.(?!\/))?(asd)(\/(([\W\d\w]){1,})|)$

它匹配这个“前缀/asd/1#s_”,我需要匹配“/asd/1#s_”中的这个“/asd/1#”,我需要匹配“/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

共有1个答案

澹台星光
2023-03-14

试试这个。这在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_']

更新:

由于问题不够清晰,这只适用于给定的顺序,因此,我认为任何其他组合都会失败。

编辑:

新Regex

reg = r"\/\w+(\/\w*\d+\W*)*(\/\d+\w*\W*)*(\/\d+\W*\w*)*(\/\w*\W*\d+)*(\/\W*\d+\w*)*(\/\W*\w*\d+)*$"
 类似资料:
  • 所需匹配: 这个regex只匹配字符串第一个实例之后的所有内容: 思想?

  • null 有人能帮我弄清楚为什么上面的代码给出了错误的答案吗?

  • 问题内容: 有没有一种简单的方法来测试Python字符串“ xxxxABCDyyyy”,以查看其中是否包含“ ABCD”? 问题答案: if “ABCD” in “xxxxABCDyyyy”: # whatever

  • 本文向大家介绍java实现字符串匹配求两个字符串的最大公共子串,包括了java实现字符串匹配求两个字符串的最大公共子串的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java实现求两个字符串最大公共子串的方法。分享给大家供大家参考,具体如下: 最近在项目工作中有一个关于文本对比的需求,经过这段时间的学习,总结了这篇博客内容:求两个字符串的最大公共子串。 算法思想:基于图计算两字符串的公共子

  • 本文向大家介绍MySQL查询从字符串中获取最后三个字符以外的子字符串?,包括了MySQL查询从字符串中获取最后三个字符以外的子字符串?的使用技巧和注意事项,需要的朋友参考一下 为此,您可以将SUBSTR与length()一起使用。 让我们首先创建一个表- 以下是使用insert命令在表中插入一些记录的查询- 以下是使用select命令显示表中记录的查询- 这将产生以下输出- 以下是查询以获取删除最