标签: capture-group

使用动态RegExp获取$ 1捕获组

如果有人知道我在这里做错了什么,我很好奇.我想在表达式中使用一个变量,但出于某种原因,当我尝试时,它似乎没有抓住搜索词$1.

这会正确返回:

$('.content').html(function(_,i) {
  return  i.replace(/(cat)/gi, '<span class="highlight">$1</span>');
});
Run Code Online (Sandbox Code Playgroud)

出于某种原因,这不是:

$('.content').html(function(_,i) {
  var customVariable = 'cat';
  var pattern = new RegExp(customVariable,'gi');
  return  i.replace(pattern, '<span class="highlight">$1</span>');
});
Run Code Online (Sandbox Code Playgroud)

我很高兴在RegExp中捕获组,我找不到其他人有这个问题,所以我想我错过了很简单的东西.

javascript regex capture-group

3
推荐指数
1
解决办法
418
查看次数

java regex - 捕获重复的组

我正在使用 Java 的正则表达式库。我想根据以下格式验证字符串:

31,5,46,7,86(...)
Run Code Online (Sandbox Code Playgroud)

数字的数量是未知的。我想确保该字符串中至少有一个数字,并且每两个数字用逗号分隔。我也想从字符串中获取数字。

注意:这只是一个简化的例子,string.split 不会解决我的实际问题)

我写了以下正则表达式:

({[0-9]++)((?:,[0-9]++)*+)
Run Code Online (Sandbox Code Playgroud)

验证部分有效。但是,当我尝试提取数字时,我得到 2 组:

Group1: 31
Group2: ,5,46,7,86
Run Code Online (Sandbox Code Playgroud)

regex101 版本:https ://regex101.com/r/xJ5oQ6/3

有没有办法可以分别获得每个数字?即以集合结束:

[31, 5, 46, 7, 86]
Run Code Online (Sandbox Code Playgroud)

提前致谢。

java regex capture-group

3
推荐指数
1
解决办法
3757
查看次数

C#Regex:如何使用在运行时生成的字符串替换标记?

给定以下输入和正则表达式字符串:

const string inputString = "${Principal}*${Rate}*${Years}";
const string tokenMatchRegexString = @"\${([^}]+)}";
Run Code Online (Sandbox Code Playgroud)

如何用我的'ReplaceToken'函数的返回值替换每个标记(即$ {Principal},$ {Rate}和$ {Years})?

private static string ReplaceToken(string tokenString)
{
    switch (tokenString)
    {
        case "Principal":
            return GetPrincipal();
        case "Rate":
            return GetRate();
        case "Years":
            return GetYears();
        default:
            throw new NotImplementedException(String.Format("A replacment for the token '{0}' has not been implemented.", tokenString));
    }
}

private static string GetPrincipal()
{
    throw new NotImplementedException();
}

private static string GetRate()
{
    throw new NotImplementedException();
}

private static string GetYears()
{
    throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)

regex token capture-group c#-3.0

2
推荐指数
1
解决办法
4192
查看次数

后处理输出文件时Perl REGEX重复捕获组

我正在处理科学格式的一串数字.例如

24  6.924E+06  8.316E-01  1.052E-01  1.622E+01  1.311E+01  0.000E+00  6.059E-06 (snip.. extends for a bit)
Run Code Online (Sandbox Code Playgroud)

现在我想为perl编写一个正则表达式,它允许我捕获列表中的第i个值.所以我目前的设置是下面的

$_ =~ ^\s+\d+\s+(\d+[.]\d+E[+]\d+);
my $temp = $1;
Run Code Online (Sandbox Code Playgroud)

哪个会给我第一个号码.如果我想要的话,我希望能够捕获第7或第50,而不必编写一个非常长的正则表达式.

这样做有简洁的方法吗?

提前致谢.

regex perl capture-group

2
推荐指数
1
解决办法
71
查看次数

ruby正则表达式扫描和gsub与块中的捕获组的工作方式不同

我有一串数字和字母交替.我想用前面的字母数替换每个字符.例如,2a3b应该返回aabbb.

首先,如果我这样做:

"2a3b".scan(/(\d)(.)/) do |count, char|
  puts char * count.to_i
end 
Run Code Online (Sandbox Code Playgroud)

我明白了:

aa
bbb
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做:

"2a3b".gsub(/(\d)(.)/) do |count, char|
  char * count.to_i
end 
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

NoMethodError: undefined method `*' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

它们不应该都表现相同(更新:我的意思是,接受捕获组作为块参数)?

更新 :(解决方法,有效)

"2a3b".gsub(/(\d)(.)/) do |match|
  $2 * $1.to_i
end 
Run Code Online (Sandbox Code Playgroud)

收益:

"aabbb"
Run Code Online (Sandbox Code Playgroud)

正如所料.

ruby regex capture-group

2
推荐指数
1
解决办法
339
查看次数

如何在Perl中的整个匹配输出中突出显示捕获组(例如,使用括号括起来)

我有以下代码,成功打印出所有匹配我的正则表达式的字符串到控制台(perl myscript.pl sample_text.txt).

$filename=shift;
open text, $filename or die "error opening $filename\n";

while (my $line = <text>) {
    push @matches, $1 while $line
        =~ m{
          (( [ACGT]{6} )
          CTGA
          [ACGT]
          GAG
          ( [ACGT]{3,6} )
          [ACGT]{2,100}
          (??{ $3 =~ tr/ACGT/TGCA/r })
          ( CGAAA[ACGT] ))
        }xgi;
}

print "$_\n" for @matches;
Run Code Online (Sandbox Code Playgroud)

(这只是我的正则表达式的简化版本,我的捕获组更加复杂,并且没有固定的长度.)

我的sample_text可以在这里下载.

我希望输出保持原样(每行一个匹配),但是我希望匹配我的正则表达式中第一个 ( [ACGT]{6} )最后一个 ( CGAAA[ACGT] )捕获组的子字符串在控制台中打印整个匹配时围绕它们使用括号.

举个例子,当我在上面的示例文件上运行上面的整个脚本时,我得到了附件(sample_text),我得到的一个匹配结果是:

TTTATGCTGATGAGAAAAAACATAAGAAAACGTATAATTTTTTCTAAAAAAGGAAAAAAGACCGAAATTTTAAGCTGTTTTTCGAAAA

我想要看到这样的输出:

(TTTATG)CTGATGAGAAAAAACATAAGAAAACGTATAATTTTTTCTAAAAAAGGAAAAAAGACCGAAATTTTAAGCTGTTTTT(CGAAAA)

regex perl capture-group

2
推荐指数
1
解决办法
83
查看次数

无法在 re.sub() repr 表达式的函数调用中使用“\1”反向引用捕获组

我有一个字符串S = '02143'和一个列表A = ['a','b','c','d','e']。我想将 'S' 中的所有数字替换为 list 中相应的元素A

例如,替换0A[0]2withA[2]等。最终输出应该是S = 'acbed'.

我试过:

S = re.sub(r'([0-9])', A[int(r'\g<1>')], S)
Run Code Online (Sandbox Code Playgroud)

然而这会产生错误ValueError: invalid literal for int() with base 10: '\\g<1>'。我猜它正在将反向引用'\g<1>'视为字符串。我该如何解决这个问题,特别是使用re.sub和捕获组,否则呢?

python regex backreference substitution capture-group

2
推荐指数
1
解决办法
611
查看次数

正则表达式捕获组的Julia语法是什么(例如Perl中的$ 1)?

我想知道在Perl的正则表达式(访问正则表达式捕获的子串)中Julia相当于1美元,2美元......

例如

$s = "some random string";
$s =~ m/(o.e).+(i.g)/;
print $1, "\n", $2;
Run Code Online (Sandbox Code Playgroud)

版画

ome
ing
Run Code Online (Sandbox Code Playgroud)

regex capture-group julia

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

是否可以计算任意 std::regex 对象中的捕获组数?

对于任意std::regex,是否可以知道其中的捕获组数?

假设结果将由函数返回CountCaptures()。这就是我想得到的:

std::regex r1("(a)bc");
int i = CountCaptures(r1); // returns 1
std::regex r2("(a)(b)c");
int j = CountCaptures(r2); // returns 2
std::regex r3("abc");
int k = CountCaptures(r3); // returns 0
Run Code Online (Sandbox Code Playgroud)

我知道std::smatch在匹配字符串之后这是可能的,但问题是我从用户那里收到一个正则表达式,我需要在匹配任何字符串之前以某种方式限制捕获组。

c++ regex capture-group c++11 c++14

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

正则表达式命名的捕获组不起作用

我遇到了最奇怪的问题,而且我知道这一定是我忽略的一些微不足道的事情。我正在编写一个简单的正则表达式,它工作得很好,直到我尝试命名我的捕获组。例如,您可以在http://www.regexr.com/上重现此内容。

要匹配的文本:

'1.2.3.4'
Run Code Online (Sandbox Code Playgroud)

要使用的正则表达式:

'(.*?)'
Run Code Online (Sandbox Code Playgroud)

这工作正常并且与版本号匹配。但是当我将正则表达式更改为:

'(?<VersionNumber>.*?)'
Run Code Online (Sandbox Code Playgroud)

它不再匹配,并且 regexrError: Invalid quantifier for target在第一个问号上显示。我还在我的 C# 应用程序中确认了相同的结果。我在这里做错了什么?

这是一个非常简单的例子,所以我不确定什么是不正确的。我确实找到了这篇文章,它描述了一个类似的问题,但答案只是为OP提供了新的正则表达式来使用,而不是真正告诉他为什么他原来的正则表达式无效。


更新

答案是 regexr.com 不再支持命名捕获组,我一定是第一次用 C# 搞砸了我的正则表达式,因为当我重写它时它工作得很好。

regex capture-group

0
推荐指数
1
解决办法
2162
查看次数

Perl捕获多个绑定运算符中的变量

有没有办法在多个绑定表达式中使用捕获组并捕获所有组?

#!/usr/bin/perl

use strict;
use warnings;

countDays(1,"2015-3-21","2016-3-24");

sub countDays {
    die "Check formatting"
        unless ($_[0] =~ m/([1-7])/ &&
                $_[1] =~ m/^(\d{4})-(\d{1,2})-(\d{1,2})$/ &&
                $_[2] =~ m/^(\d{4})-(\d{1,2})-(\d{1,2})$/);

            # testing
            print "$1\n$2\n$3\n$4\n$5\n$6\n$6\n";

}
Run Code Online (Sandbox Code Playgroud)

这只是抓住了最后三组:$1,$2,和$3.

编辑Avinash Raj建议的预期输出:

1
2015
3
21
2016
3
24
Run Code Online (Sandbox Code Playgroud)

regex perl capture-group

0
推荐指数
1
解决办法
68
查看次数

swift 中带有 NSRegularExpressions 的可选捕获组

我想要有多个可选的捕获组,并且我想要访问它们对应的字符串。

看起来/工作起来像这样的东西:

let text1 = "something with foo and bar"
let text2 = "something with just bar"
let regex = NSRegularExpression(pattern: "(foo)? (bar)")

for (first?, second) in regex.matches(in:text1) {
   print(first) // foo
   print(second) // bar
}

for (first?, second) in regex.matches(in:text2) {
   print(first) // nil
   print(second) // bar
}
Run Code Online (Sandbox Code Playgroud)

capture-group ios nsregularexpression swift

0
推荐指数
1
解决办法
920
查看次数