标签: capturing-group

是否有正则表达式的风格,允许我计算*和+运算符匹配的重复次数?

是否有正则表达式的风格,允许我计算*+运算符匹配的重复次数?我特别想知道它是否可以在.NET平台下运行.

.net regex repeat matching capturing-group

5
推荐指数
1
解决办法
1222
查看次数

正则表达式 - 保存重复捕获的组

这就是我正在做的事情

a = "%span.rockets#diamonds.ribbons.forever"
a = a.match(/(^\%\w+)([\.|\#]\w+)+/)
puts a.inspect
Run Code Online (Sandbox Code Playgroud)

这就是我得到的

#<MatchData "%span.rockets#diamonds.ribbons.forever" 1:"%span" 2:".forever">
Run Code Online (Sandbox Code Playgroud)

这就是我要的

#<MatchData "%span.rockets#diamonds.ribbons.forever" 1:"%span" 2:".rockets" 3:".#diamonds" 4:".ribbons" 5:".forever">
Run Code Online (Sandbox Code Playgroud)

救命?我尝试过但失败了:(

ruby regex capturing-group

5
推荐指数
2
解决办法
2772
查看次数

积极向后看vs不自拍组:不同的行为

re在代码中使用python正则表达式(模块),并注意到在这些情况下的不同行为:

re.findall(r'\s*(?:[a-z]\))?[^.)]+', 'a) xyz. b) abc.') # non-capturing group
# results in ['a) xyz', ' b) abc']
Run Code Online (Sandbox Code Playgroud)

re.findall(r'\s*(?<=[a-z]\))?[^.)]+', 'a) xyz. b) abc.') # lookbehind
# results in ['a', ' xyz', ' b', ' abc']
Run Code Online (Sandbox Code Playgroud)

我需要得到的就是正义['xyz', 'abc']。为什么示例的行为有所不同,又如何获得期望的结果?

python regex lookbehind capturing-group

5
推荐指数
1
解决办法
1484
查看次数

正则表达式仅捕获匹配中捕获组的最后一个实例

我有两种不同语言的正则表达式,它们产生相同的奇数结果(javaScript和Flash).我想知道的不是如何解决它,而是为什么会发生这种行为?

正则表达式:

\[(\\{2}|\\\]|[^\]])*\]
Run Code Online (Sandbox Code Playgroud)

这里的目标是匹配一个括号中的字符串,并确保我不会停留在转义括号中.

如果我有文本输入[abcdefg]它是正确匹配的,但作为捕获组的一部分返回的唯一内容是g,在我期望的位置abcdefg.如果我将表达式更改为 \[((?:\\{2}|\\\]|[^\]])*)\],那么我得到我想要的结果.

那为什么会这样呢?这会在其他语言中保持一致吗?

注意:简化表达式以\[([^\]])*\]产生相同的问题.

javascript regex actionscript-3 capturing-group ecmascript-5

5
推荐指数
1
解决办法
6603
查看次数

正则表达式 - 如何匹配特定长度的唯一字符组

我正在寻找一个正则表达式,它仅在所有字符都是唯一的情况下才匹配特定长度的特定字符组。

对于给定的字符串示例:

123132213231312321112122121111222333211221331

123, 132, 213, 231, 312, 321匹配 和 112, 122, 121, 111, 313, 322, 221, 323, 131等不匹配。

我试过了,(?:([0-9])(?!.{3}\1)){3}但完全错了

python regex capturing-group

5
推荐指数
1
解决办法
1256
查看次数

NSRegularExpression无法找到捕获组匹配项

我正在尝试使用一个正则表达式模式解析字符串.

这是模式:

(\")(.+)(\")\s*(\{)
Run Code Online (Sandbox Code Playgroud)

这是要解析的文本:

"base" {
Run Code Online (Sandbox Code Playgroud)

我想找到这4个捕获组:

1. "
2. base
3. "
4. {
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码尝试捕获这些组

class func matchesInCapturingGroups(text: String, pattern: String) -> [String] {
    var results = [String]()

    let textRange = NSMakeRange(0, count(text))
    var index = 0

    if let matches = regexp(pattern)?.matchesInString(text, options: NSMatchingOptions.ReportCompletion, range: textRange) as? [NSTextCheckingResult] {
        for match in matches {
            // this match = <NSExtendedRegularExpressionCheckingResult: 0x7fac3b601fd0>{0, 8}{<NSRegularExpression: 0x7fac3b70b5b0> (")(.+)(")\s*(\{) 0x1}
            results.append(self.substring(text, range: match.range))
        }
    }

    return results
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,它只能找到一个范围(0, 8)等于的组:"base" {.所以它找到一个组,它是整个字符串而不是4个组. …

regex ios capturing-group nsregularexpression swift

5
推荐指数
1
解决办法
1637
查看次数

正则表达式:替换捕获组中的字符

编辑

在正则表达式中,匹配的捕获组是否可以替换为相同的匹配更改(将一个字符替换为另一个字符)?

原问题

我正在将产品列表转换为 CSV 文本文件。列表中的每一行都有:number name[ description] price格式如下:

1 PRODUCT description:120
2 PRODUCT NAME TWO second description, maybe:80
3 THIRD PROD:18
Run Code Online (Sandbox Code Playgroud)


生成的格式还必须包含一个slug(而-不是)作为第二个字段:

1 PRODUCT:product-1:description:120
2 PRODUCT NAME TWO:product-name-two-2:second description, maybe:80
3 THIRD PROD:third-prod-3::18
Run Code Online (Sandbox Code Playgroud)

我正在使用的正则表达式是这样的:

(\d+) ([A-Z ]+?)[ ]?([a-z ,]*):([\d]+)

替换字符串是:

`\1 \2:\L$2-\1:\3:\4
Run Code Online (Sandbox Code Playgroud)

这样我的结果是:

1 PRODUCT:product-1:description:120
2 PRODUCT NAME TWO:product name two-2:second description, maybe:80
3 THIRD PROD:third prod-3::18
Run Code Online (Sandbox Code Playgroud)

-我错过的是第二个字段中需要的分隔符连字符,即\2用“ -”而不是“ ”进行分组。
是否可以使用单个正则表达式,或者我应该进行第二遍?

(目前我使用 Sublime 文本编辑器)

谢谢。

regex capturing-group

5
推荐指数
1
解决办法
6016
查看次数

C++ 正则表达式:获取 SubMatch 匹配的捕获组的索引

语境。我正在开发一个 Lexer/Tokenizing 引擎,它将使用正则表达式作为后端。词法分析器接受定义令牌类型/ID 的规则,例如

<identifier> = "\\b\\w+\\b"

正如我所设想的,为了进行基于正则表达式匹配的标记化,正则表达式定义的所有规则都包含在捕获组中,并且所有组都由 OR 分隔。

当执行匹配时,我们生成的每个匹配都必须有一个与其匹配的捕获组的索引。我们使用这些 ID 将匹配映射到令牌类型。

那么这个问题的问题就出现了——如何获取群组的ID

这里有类似的问题,但它没有为我的具体问题提供解决方案。

正是我的问题,但它是在 JS 中,我需要一个 C/C++ 解决方案。

假设我有一个正则表达式,由用 OR 分隔的捕获组组成:

(\\b[a-zA-Z]+\\b)|(\\b\\d+\\b)

它匹配整数或字母单词。

我的问题要求可以知道正则表达式子匹配匹配的捕获组的索引,例如在匹配字符串时

foo bar 123

将进行 3 次迭代。每次迭代的匹配项的组索引将为0 0 1,因为前两个匹配项与第一个捕获组匹配,最后一个匹配项与第二个捕获组匹配。

我知道在标准std::regex库中这并不完全可能(regex_token_iterator不是解决方案,因为我不需要跳过任何匹配)。

boost::regex我对PCRE 正则表达式库了解不多。

完成这项任务的最佳方法是什么?使用哪个库和方法?

c++ regex tokenize lexer capturing-group

5
推荐指数
1
解决办法
2190
查看次数

捕获并执行多行代码并将结果合并到raku中

这是一个降价文件example.md我有:

## New language

Raku is a new language different from Perl.

## what does it offer
+ Object-oriented programming including generics, roles and multiple dispatch
+ Functional programming primitives, lazy and eager list evaluation, junctions, autothreading and hyperoperators (vector operators)
+ Parallelism, concurrency, and asynchrony including multi-core support
+ Definable grammars for pattern matching and generalized string processing
+ Optional and gradual typing



This code will be evaluated.


```{raku evaluate=TRUE}
4/5
```



Rakudo is a compiler for …
Run Code Online (Sandbox Code Playgroud)

regex replace perl6 capturing-group raku

5
推荐指数
2
解决办法
158
查看次数

如何匹配自定义序列化对象格式中的所有键和值?

我试图从字符串形式的对象中挑选出所有值。我已经创建了正则表达式,但我仍然遇到无法删除引号并碰壁的问题......

这是我得到的结果与期望结果的比较的代码:

const regex = /(?:"([^"]+)\")|([^=",{}.]+)/g
const string = 'obj{a="0",b="1",domain="a-ss.test.io:666",f="g",range="3.594e-04...4.084e-04"}'

const matches = string.match(regex)
console.log(matches)
Run Code Online (Sandbox Code Playgroud)

这是结果数组:

[
    "obj",
    "a",
    "\"0\"",
    "b",
    "\"1\"",
    "domain",
    "\"a-ss.test.io:666\"",
    "f",
    "\"g\"",
    "range",
    "\"3.594e-04...4.084e-04\""
]
Run Code Online (Sandbox Code Playgroud)

虽然我想要的结果是:

[
    "obj",
    "a",
    "0",
    "b",
    "1",
    "domain",
    "a-ss.test.io:666",
    "f",
    "g",
    "range",
    "3.594e-04...4.084e-04"
]

Run Code Online (Sandbox Code Playgroud)

有谁知道如何从返回的每个数组值中删除引号?

javascript regex parsing match capturing-group

5
推荐指数
1
解决办法
140
查看次数