标签: regex-group

将匹配的正则表达式组提取到 Scala 中的数组

我遇到了这个问题。我有一个

val line:String = "PE018201804527901"
Run Code Online (Sandbox Code Playgroud)

与此匹配

regex : (.{2})(.{4})(.{9})(.{2})
Run Code Online (Sandbox Code Playgroud)

我需要从正则表达式中提取每个组到一个数组。

结果将是:

Array["PE", "0182","018045279","01"]
Run Code Online (Sandbox Code Playgroud)

我尝试做这个正则表达式:

val regex =  """(.{2})(.{4})(.{9})(.{2})""".r
val x= regex.findAllIn(line).toArray
Run Code Online (Sandbox Code Playgroud)

但它不起作用!

regex arrays scala extract regex-group

5
推荐指数
3
解决办法
3567
查看次数

告诉RegEx在引号内忽略括号

我有以下RegEx使用和工作:

/\B@(@?\w+(?:::\w+)?)([ \t]*)(\( ( (?>[^()]+) | (?3) )* \))?/x

这个字符串@extends('template', 'test')正确分组并给我我需要的地方.

问题是如果字符串在引号内包含一个未闭合的括号 - 它将失败:

@extends('template', 'te)st')给出@extends('template', 'te)输出

如何告诉此RegEx忽略引号内的括号('或者")

以下是问题的RegExr演示:http://regexr.com/v1?396ci

这是一个应该能够通过的字符串列表:

@extends('template', 'test')     // working
@extends('template', $test)      // working
@extends('template', 'te()st')   // working
@extends('template', 'te)st')    // broken 
@extends('template', 'te())st')  // broken
@extends('template', 'te(st')    // broken
@extends('template', 'test)')    // broken
@extends('template', '(test')    // broken
Run Code Online (Sandbox Code Playgroud)

我把它缩小了 - 我想我需要能够说出来

(
   \(  <-- only if not inside quotes
     ( 
         (?>[^()]+) | (?3) 
     )* 
   \) …
Run Code Online (Sandbox Code Playgroud)

php regex regex-group

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

替换双引号内所有出现的 Tab 字符

最后,我想替换 我目前在Regex101上的所有\t包含的内容,尝试对我的正则表达式进行各种迭代......这是我迄今为止最接近的......"

originString = blah\t\"blah\tblah\"\t\"blah\"\tblah\tblah\t\"blah\tblah\t\tblah\t\"\t\"\tbleh\"
regex = \t?+\"{1}[^"]?+([\t])?+[^"]?+\"
\t?+       maybe one or more tab
\"{1}      a double quote
[^"]?+     anything but a double quote
([\t])?+   capture all the tabs
[^"]?+     anything but a double quote
\"{1}      a double quote
Run Code Online (Sandbox Code Playgroud)

我的逻辑有问题!我需要您帮助对制表符进行分组。

c# regex regex-group

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

正则表达式从组中删除空格

嗨,我有以下数值

000001010016C02AB  111*
000001010016C02    111H
000001010016C      111 
Run Code Online (Sandbox Code Playgroud)

而预期的产出是

00000101001,C02AB,*
00000101001,C02,H
00000101001,C, 
Run Code Online (Sandbox Code Playgroud)

值可能会有所不同.此字符串的长度始终为23.如果字符不存在,则位置将填充空白区域.现在的正则表达式是

(^.{11})[0-9](.{5})(?:.{5})(.*)
Run Code Online (Sandbox Code Playgroud)

但是在第二组中使用此正则表达式时,会返回空格.我希望那些白色空间被删除.

电流输出:

00000101001,C02AB,*
00000101001,C02  ,H
00000101001,C    , 
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我删除第二组的空白区域吗?

演示

java regex regex-group

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

在C#中使用.matches .Concat进行正则表达式和正确捕获

我有以下正则表达式:

@"{thing:(?:((\w)\2*)([^}]*?))+}"
Run Code Online (Sandbox Code Playgroud)

我用它来查找字符串中的匹配项:

MatchCollection matches = regex.Matches(string);
       IEnumerable formatTokens = matches[0].Groups[3].Captures
                                   .OfType<Capture>()
                                   .Where(i => i.Length > 0)
                                   .Select(i => i.Value)
                                   .Concat(matches[0].Groups[1].Captures.OfType<Capture>().Select(i => i.Value));
Run Code Online (Sandbox Code Playgroud)

这用来产生我想要的结果; 但是,我的目标已经改变了.这是现在所需的行为:

假设输入的字符串是'stuff/{thing:aa/bb/cccc} {thing:cccc}'

formatTokens是:

formatTokens[0] == "aa/bb/cccc"
formatTokens[1] == "cccc"
Run Code Online (Sandbox Code Playgroud)

现在,这是我得到的:

formatTokens[0] == "/"
formatTokens[1] == "/"
formatTokens[2] == "cccc"
formatTokens[3] == "bb"
formatTokens[4] == "aa"
Run Code Online (Sandbox Code Playgroud)

请特别注意,即使输入两次,"cccc"也不会出现两次.

我认为问题是1)正则表达式中的重新捕获和2)concat配置(从我希望所有内容分离时),但到目前为止,我还没有找到产生我想要的组合.有人能否对正确的正则表达式/ concat组合有所了解,以产生上述所需的结果?

c# regex match regex-group

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

在java中使用regex g标志

是否可以在 java 模式中使用正则表达式全局 g 标志?

我尝试过,final Pattern pattern = Pattern.compile(regex,Pattern.DOTALL); 但它的行为不像全局标志。

我们在 java 中有任何解决方法吗?

我的正则表达式是:
private final String regex ="(public|private|protected|static|final|abstract|synchronized|volatile)\\s*([\\w<>\\[\\]]+)\\s*(\\w+)\\s*\\(([\\w\\s\\w,<>\\[\\]]*)?\\)\\s*(\\bthrows\\b)?[\\s\\w\\s,\\w]*\\{[\\n\\t]*(.+)[\\n\\t]*((return|throw){1}\\s*)(\\w*)\\s*;\\s*[\\}]";

输入是文件内容,类似于下面正则表达式链接中提到的内容:https : //regex101.com/r/u7vanR/3

我想要 java 模式找到这两个出现,但是使用 java 正则表达式标志它只是找到第一个而不是两个。

java regex regex-group

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

匹配日期的正则表达式(月日、年或 m/d/yy)

我正在尝试编写一个正则表达式,该表达式可用于在字符串中查找日期,该字符串前面(或后面)可能有空格、数字、文本、行尾等。该表达式应处理美国日期格式要么

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)

c# regex regex-group regex-greedy regex-lookarounds

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

Elixir 中的 RegEx 捕获组

我想知道这个 Elixir 正则表达式是如何工作的。

 Regex.run(~r{(*UTF)([^\w])+}, "dd!!%%%")
Run Code Online (Sandbox Code Playgroud)

当我执行这个正则表达式时,输出是

["!!%%%", "%"]
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么在匹配正则表达式后会重复最后一个 %。

regex elixir regex-group

5
推荐指数
0
解决办法
538
查看次数

swift中的正则表达式

我对 swift 中的 NSRegularExpression 有点困惑,有人可以帮助我吗?

任务:1给出("name","john","name of john")
那么我应该得到["name","john","name of john"]. 在这里我应该避免使用括号。

任务:2给出("name"," john","name of john")
那么我应该得到["name","john","name of john"]. 在这里我应该避免括号和额外的空格,最后得到字符串数组。

任务:3给出key = value // comment
那么我应该得到["key","value","comment"]. 在这里,我应该通过避免只获取行中的字符串,=并且//
我已经尝试了下面的任务 1 代码但没有通过。

let string = "(name,john,string for user name)"
let pattern = "(?:\\w.*)"

do {
    let regex = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)
    let matches = regex.matches(in: string, options: [], range: NSRange(location: 0, length: string.utf16.count))
    for match …
Run Code Online (Sandbox Code Playgroud)

regex regex-group nsregularexpression regex-greedy swift

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

正则表达式?对于一组词

我想为 NAME;NAME;NAME 和 NAME;NAME;NAME;NAME 设置一个正则表达式,其中 NAME 的第四次出现是可选的。

我有一个正则表达式 (.+);(.+);(.+) 匹配第一个模式但不匹配第二个。我试过玩?但它不适用于 (.+);(.+);(.+)(;(.+))?基本上,我想实现第四个 (.+) 为零或一次出现。

java regex regex-group

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