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

正则表达式,捕获组中特定的最后一个字符类型

拓拔烨赫
2023-03-14

我目前拥有的正则表达式是:

"^(?:(\\.\\.)|^([a-z]+[a-z.\\-]*)([\\*]?)[\\[]*([^\\]]*)[\\]]*)$";

它捕获了其中一个“.”(第1组)第2-4组为空
或:
一组小写、点、破折号。以小写字母开头(第2组)
——后跟可选星号(第3组)
——后跟方括号内的可选内容(第4组)

我有两个问题,第一个是让第二组必须以字母结尾,我尝试了很多方法,包括:

"^([a-z]+[a-z.\\-]*[a-z]$)"
"^([a-z]+[a-z.\\-]*[a-z])$"

能杀死3-4组的任何生物

"^([a-z]+[a-z.\\-]*[a-z])"

这似乎没什么不同

我遇到的另一个问题是组4,它不依赖于方括号(这是有意义的,因为我有*字符为他们)...但是如果我删除该字符,它不会给我任何组的结果。

任何帮助都是非常需要和感激的。

作为对下面评论的回应,以下内容应该匹配:
“string”-(group1)(group2)(group3)(group4)

".." - (..)()()()
"blah" - ()(blah)()()
"blah.blah" - ()(blah.blah)()()
"blah.blah*" - ()(blah.blah)(*)()
"blah*" - ()(blah)(*)()
"blah.blah*[foobar] - ()(blah.blah)(*)(foobar)
"blah[foobar] - ()(blah)()(foobar)

以下内容不应匹配:

 "."
 "..."
 ".blah"
 "blah."
 ".blah*"
 "blah.*[foobar]

共有2个答案

萧奇
2023-03-14

这就是我能想到的:

^(\.{2})?([a-z](?:\.*-*[a-z])*)?(\*)?(\[[^]]*\])?$

我不确定括号里允许什么,所以它匹配那里的任何非括号字母。

(正确转义:^(\\.{2})?([a-z](?:\\.-*[a-z])*)?(\\*)?(\\[[^]]*\\])?$

这个正则表达式:[a-z](?:\.*-*[a-z])*将始终匹配以小写字母开头和结尾的字符串。

方祺
2023-03-14
                   ┌ one or more lowercase letters followed by
                   │ 
                   │   ┌ none or several occurrences of ───────────────────────┐
                   │   │     ┌ dot or dash                                     │
                   │   │     │     ┌ followed by one or more lowercase letters │
                   │   │     │     │     ┌─────────────────────────────────────┘
                   │   │     │     │     │ 
                   │   │     │     │     │  ┌ followed by optional asterisk
                   │   │     │     │     │  │
                   │   │     │     │     │  │   ┌ followed by optional square brackets
            ┌ or   │   │     │     │     │  │   │         ┌ with some content inside │
            │      │   │     │     │     │  │   │         │        ┌─────────────────┘
            │      │   │     │     │     │  │   │         │        │
^(?:(\\.\\.)|(?:([a-z]+(?:[.\\-]*[a-z]+)*)(\\*?)(?:\\[([^\\]]*)\\])?))$
│   │      │                                                          │
│   └ two  │                                                          │
│     dots ┘                                                          │
│                                                                     │
└ start of string                                       end of string ┘
 类似资料:
  • 我正在研究regexone.com的问题6,我不明白分组是如何与“改变”一起工作的。 这是测试字符串: 任务是捕捉快速的棕色狐狸没有额外的空白,这可以通过完成。 但是捕获了一组([27-28])为什么?结果,捕获了两组-[6-28]和([27-28])。 分组是如何工作的?除了字符类按字符匹配而更改按单词匹配(我的基本理解)之外,处理更改和字符类还有什么区别? 注:当我甚至不知道这些问题的名称时,

  • 我正在纠结于捕获最后一组--使用我的正则表达式,只有第一行匹配模式,而不是其他两行。如果我将正则表达式更改为,则所有3行都匹配,但第一行捕获不成功(我只获得1组,而不是2组和)。 如何编写这个正则表达式,使所有行都有5个匹配组?

  • 我只想在空格字符()后面跟一个哈希()时匹配空格字符。 这就是下面的试图做的,这是一个捕获组。(我试图避开括号,否则括号在组集中无法正确识别)。然而,这是行不通的。 下面的正则表达式 符合以下所有条件 而我想分别搭配和 有没有办法在字符集中指定捕获组?

  • 问题:如何首先捕获两个角色之间的组,然后再匹配匹配组中的角色? 给定输入: 问题1:我想捕获两个角色之间的组,无限次。 正则表达式解决方案: 捕获的群体: 问题2:我想匹配捕获组中的一个字符 尝试正则表达式解决方案1: 尝试的正则表达式解决方案2: 我的问题:以上尝试的解决方案都没有捕获输入字符串中的星号。我如何实现这一点?

  • 假设我有这个虚拟URL,我需要提取植物及其颜色作为 下面的I have正在按预期捕获我需要的元素,但是当我的URL中的植物少于4株时,它无法捕获任何东西。底部有一个指向regex测试员的链接,其中有示例代码和URL,您可以使用。 如何修改这个正则表达式,使其动态工作,从而在不需要静态URL结构的情况下捕获可用内容。现在,假设我最多只能捕获4株植物(8组) https://regex101.com/

  • 在Python中,如何在非捕获组中捕获组?换句话说,如何重复包含捕获组的非捕获子模式? 例如,捕获导入字符串上的所有包名。例如,字符串: 导入熊猫、操作系统、系统 将返回“pandas”、“os”和“sys”。下面的模式捕获第一个包并到达第二个包: 从这里,我想重复捕获组并匹配以下字符的子模式,即。当我用一个非捕获组包围这个子模式并重复它时: 它不再捕捉里面的群体。