我一直在处理需求,我需要在以下字符串上创建一个正则表达式:
startDate:[2016-10-12T12:23:23Z:2016-10-12T12:23:23Z]
Run Code Online (Sandbox Code Playgroud)
这个字符串可以有很多变化,如下所示:
startDate:[*;2016-10-12T12:23:23Z]
startDate:[2016-10-12T12:23:23Z;*]
startDate:[*;*]
Run Code Online (Sandbox Code Playgroud)
startDate在上面的表达式中是一个键名,可以是endDate,updateDate等,这意味着我们不能在表达式中硬编码.密钥名称可以被接受为任何单词[a-zA-Z_0-9]*
我使用以下编译模式
Pattern.compile("([[a-zA-Z_0-9]*):(\\[[[\\*]|[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}[Z]];[[\\*]|[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}[Z]]\\]])");
Run Code Online (Sandbox Code Playgroud)
模式匹配,但创建的组不是我所期望的.我希望下面用括号括起来的组:
(startDate):([*:2016-10-12T12:23:23Z])
group1 = "startDate"
group2 = "[*;2016-10-12T12:23:23Z]"
Run Code Online (Sandbox Code Playgroud)
你能帮我在Java和小组中正确表达吗?
我有一个这样的字符串:docker login -u username -p password docker-registry-url.
我用Groovy脚本执行命令execute.出于调试目的,我在执行前打印命令,但由于它包含敏感数据,因此我对用户名和密码进行了模糊处理.
def printableCmd = cmd.toString()
def m = printableCmd =~ /(?:.+) -u (.+) -p (.+) (?:.+)/
if (m.matches() && m[0].size() >= 3) {
printableCmd = m[0][-1..-2].inject(m[0][0]) { acc, val -> acc.replaceAll(val, "***") }
}
Run Code Online (Sandbox Code Playgroud)
上面的工作正如预期和打印docker login -u *** -p *** docker-registry-url,但我想知道是否有更惯用的方式来做到这一点.请注意,我不想删除捕获的组,只需用星号替换它们,因此非常清楚命令没有错误,但出于安全目的进行模糊处理.
我必须解析一个字符串,格式为!info1!info2!,并且info2是可选的。
我正在尝试使用正则表达式来捕获,info1如果info2需要的话。
我想出了以下模式:
!([^!]*?)!(.*?)!|!(.*?)!
Run Code Online (Sandbox Code Playgroud)
它有效,但我对结果不满意:
!foo!bar! -> Group1: foo Group2:bar
!foo! -> Group3: foo
(https://regex101.com/r/D9d6YP/1)
Run Code Online (Sandbox Code Playgroud)
在这两种表达方式中,foo表示相同的事物,并且随后以相同的方式进行处理。我想将它捕获在同一组中,无论是否有第二组。
我尝试过使用命名捕获组,但似乎它们无法重复使用
!(?<info1>[^!]*?)!(?<info2>.*?)!|!(?<info1>.*?)!
Run Code Online (Sandbox Code Playgroud)
失败并显示错误消息“子模式名称必须是唯一的”。
有什么办法可以捕获同一组中的不同模式吗?
我正在尝试从分隔的字符串中解析出单词,并按顺序排列捕获组.例如
dog.cat.chicken.horse.whale
我知道([^.]+)哪个可以解析每个单词但是这会将每个字符串放在捕获组1中.
Match 1
Full match 0-3 `dog`
Group 1. 0-3 `dog`
Match 2
Full match 4-7 `cat`
Group 1. 4-7 `cat`
Match 3
Full match 8-15 `chicken`
Group 1. 8-15 `chicken`
Match 4
Full match 16-21 `horse`
Group 1. 16-21 `horse`
Match 5
Full match 22-27 `whale`
Group 1. 22-27 `whale`
Run Code Online (Sandbox Code Playgroud)
我真正需要的是类似的东西
Match 1
Full match 0-27 `dog.cat.chicken.horse.whale`
Group 1. 0-3 `dog`
Group 2. 4-7 `cat`
Group 3. 8-15 `chicken`
Group 4. 16-21 `horse`
Group 5. …Run Code Online (Sandbox Code Playgroud) 码:
Match match = Regex.Match("abc", "(?(x)bx)");
Console.WriteLine("Success: {0}", match.Success);
Console.WriteLine("Value: \"{0}\"", match.Value);
Console.WriteLine("Index: {0}", match.Index);
Run Code Online (Sandbox Code Playgroud)
输出:
Success: True
Value: ""
Index: 1
Run Code Online (Sandbox Code Playgroud)
似乎没有"else"表达式的条件组将改为从"if"表达式的第一个字符创建一个前瞻,并将其用作"else".在这种情况下,它将像正则表达式一样运行(?(x)bx|(?=b))
****在这里发生了什么?这是故意的吗?它似乎没有记录.
编辑:已在corefx存储库中创建了一个问题:https://github.com/dotnet/corefx/issues/26787
我正在尝试编写一些正则表达式,以使我可以对捕获组进行隐式查找,以便可以从电子邮件中提取可能的引用。我需要知道如何从某个角度看向第一个空白。如果找到一个数字,我不希望提取引用。
我已经达到如下所示。我有2个捕获组-'PreRef'和'Ref'。如果'PreRef'包含数字,我不希望找到'Ref'匹配项。到目前为止,我只检查冒号前面的字符是否为数字。
(?<PreRef>\S+)(?<![\d]):(?<Ref>\d{5})
Run Code Online (Sandbox Code Playgroud)
此处的“参考”匹配为12345:
This is a reference:12345
Run Code Online (Sandbox Code Playgroud)
但是不是这里(“引用”一词中有5):
This is not a ref5rence:12345
Run Code Online (Sandbox Code Playgroud) a <- c("this is a number 9999333333 and i got 12344")
Run Code Online (Sandbox Code Playgroud)
我如何将大于 5 位的数字替换为额外的数字为“X”
预期输出:
"this is a number 99993XXXXX and i got 12344"
Run Code Online (Sandbox Code Playgroud)
我试过的代码:
gsub("(.{5}).*", "X", a)
Run Code Online (Sandbox Code Playgroud) 给定一组单词,我需要知道哪些单词仅由一组字母组成。即使此字母是验证集的一部分,该单词的字母也不能超过允许的数量。
例:
Char set: a, a, ã, c, e, l, m, m, m, o, o, o, o, t (fixed set)
Words set: mom, ace, to, toooo, ten, all, aaa (variable set)
Run Code Online (Sandbox Code Playgroud)
结果:
mom = true
ace = true
to = true
toooo = true
ten = false (n is not in the set)
all = false (there is only 1 L in the set)
aaa = false (theres is only 2 A in the set)
Run Code Online (Sandbox Code Playgroud)
如何在Javascript中生成此正则表达式?(区分大小写不是问题)。
我尝试了以下代码,但未成功:
var str = …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个正则表达式,该表达式可用于在字符串中查找日期,该字符串前面(或后面)可能有空格、数字、文本、行尾等。该表达式应处理美国日期格式要么
1) Month Name Day, Year - 即 2019 年 1 月 10 日或
2) mm/dd/yy - 即 11/30/19
我为月份名称,年份找到了这个
(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)\s+\d{1,2},\s+\d{4}
Run Code Online (Sandbox Code Playgroud)
(感谢 Veverke 在这里Regex 匹配日期,如月份名称日逗号和年份
这对于 mm/dd/yy(以及 m/d/y 的各种组合)
(1[0-2]|0?[1-9])/(3[01]|[12][0-9]|0?[1-9])/(?:[0-9]{2})?[0-9]{2}
Run Code Online (Sandbox Code Playgroud)
(在此感谢 Steven Levithan 和 Jan Goyvaerts https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s04.html
我试图把它们像这样结合起来
((Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)\s+\d{1,2},\s+\d{4})|((1[0-2]|0?[1-9])/(3[01]|[12][0-9]|0?[1-9])/(?:[0-9]{2})?[0-9]{2})
Run Code Online (Sandbox Code Playgroud)
当我在输入字符串“Paid on 1/1/2019”中搜索“on [regex above]”时,它确实找到了日期,但没有找到“on”这个词。如果我只是使用,则找到该字符串
(1[0-2]|0?[1-9])/(3[01]|[12][0-9]|0?[1-9])/(?:[0-9]{2})?[0-9]{2}
Run Code Online (Sandbox Code Playgroud)
谁能看到我做错了什么?
编辑
我正在使用下面的 c# .net 代码:
string stringToSearch = "Paid on 1/1/2019";
string searchPattern = @"on ((Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)\s+\d{1,2},\s+\d{4})|((1[0-2]|0?[1-9])/(3[01]|[12][0-9]|0?[1-9])/(?:[0-9]{2})?[0-9]{2})";
var match = Regex.Match(stringToSearch, searchPattern, RegexOptions.IgnoreCase);
string foundString;
if (match.Success)
foundString= stringToSearch.Substring(match.Index, match.Length);
Run Code Online (Sandbox Code Playgroud)
例如
string searchPattern = …Run Code Online (Sandbox Code Playgroud) 我想知道这个 Elixir 正则表达式是如何工作的。
Regex.run(~r{(*UTF)([^\w])+}, "dd!!%%%")
Run Code Online (Sandbox Code Playgroud)
当我执行这个正则表达式时,输出是
["!!%%%", "%"]
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么在匹配正则表达式后会重复最后一个 %。
regex ×10
regex-group ×10
.net ×2
c# ×2
java ×2
regex-greedy ×2
data-masking ×1
elixir ×1
groovy ×1
gsub ×1
javascript ×1
prometheus ×1
r ×1