如果有人知道我在这里做错了什么,我很好奇.我想在表达式中使用一个变量,但出于某种原因,当我尝试时,它似乎没有抓住搜索词$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中捕获组,我找不到其他人有这个问题,所以我想我错过了很简单的东西.
我正在使用 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)
提前致谢。
给定以下输入和正则表达式字符串:
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) 我正在处理科学格式的一串数字.例如
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,而不必编写一个非常长的正则表达式.
这样做有简洁的方法吗?
提前致谢.
我有一串数字和字母交替.我想用前面的字母数替换每个字符.例如,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)
正如所料.
我有以下代码,成功打印出所有匹配我的正则表达式的字符串到控制台(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)
我有一个字符串S = '02143'
和一个列表A = ['a','b','c','d','e']
。我想将 'S' 中的所有数字替换为 list 中相应的元素A
。
例如,替换0
为A[0]
、2
withA[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
和捕获组,否则呢?
我想知道在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) 对于任意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
在匹配字符串之后这是可能的,但问题是我从用户那里收到一个正则表达式,我需要在匹配任何字符串之前以某种方式限制捕获组。
我遇到了最奇怪的问题,而且我知道这一定是我忽略的一些微不足道的事情。我正在编写一个简单的正则表达式,它工作得很好,直到我尝试命名我的捕获组。例如,您可以在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# 搞砸了我的正则表达式,因为当我重写它时它工作得很好。
有没有办法在多个绑定表达式中使用捕获组并捕获所有组?
#!/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) 我想要有多个可选的捕获组,并且我想要访问它们对应的字符串。
看起来/工作起来像这样的东西:
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)