Sed追加重码捕获组
如果有人可以提供帮助,我正在尝试使用正则和捕获组进行SED附录,但是它不能完全工作: echo "#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/" | sed -re '/#baseurl=http:\/\/mirror.centos.org(.*)/a baseurl=https:\/\/10.10.10.10\ \1' #baseurl=http://mirror.centos.org/centos//contrib// baseurl=https://10.10.10.10 1 目前仅给出字面价值1而不是捕获组. 它应该给出: #baseurl=http://mirror.centos.org/centos//contrib// baseurl=https://10.10.10.10/centos//contrib// 我也尝试了反斜杠括号,但它不起作用
4 2024-03-28
编程技术问答社区
在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 } 解决方案 用NSRegularExpression检索捕获的潜台词并不容易. 首先,matches(in:range:)的
8 2023-10-09
编程技术问答社区
如何将字符串分为两个部分,然后以新字符串的方式以相反的顺序加入?
这是一个例子: $str="this is string 1 / 4w"; $str=preg_replace(?); var_dump($str); 我想在此字符串中捕获1 / 4w,然后将此部分移至字符串的开始. 结果:1/4W this is string 只给我一个包含捕获的变量. 最后一部分1 / 4W可能不同. 例如. 1 / 4w可以是1/ 16W,1 /2W,1W或2w 字符W可能是上案例或下情况. 解决方案 使用$str = "this is string 1 / 4w"; // "1 / 4w" can be 1/ 16W, 1 /2W, 1W, 2w $str = preg_replace('~^(.*?)(\d+(?:\s*/\s*\d+)?w)~i', "$2 $1", $str); var_dump($str); 其他解决方案 没有看到一些不同的样本输入,似乎第一个子字符串中似乎没有数字.因此,我使用否定
42 2023-10-05
编程技术问答社区
Regex: 捕获组内的捕获组
介绍 (如果... 对Intros感到无聊,可以跳至) 这个问题并不针对VBScript(在这种情况下我只是使用过):我想找到一种用于一般正则表达式用法的解决方案(包括编辑器). 我想创建 示例4的适应在MS Excel 中. 我需要捕获一个整个模式,然后在其中捕获其他3种模式.但是,以相同的表达方式,我还需要捕获另一种模式,然后再次捕获其中的其他3种模式(是的……但是,在指向Nutjob手指之前,请完成阅读). 我首先想到命名为捕获群体我意识到我不应该«命名和编号捕获组的混合»,因为不建议使用«,因为风味在组编号的方式上不一致». . 然后,我研究了For Each C In Myrange strPattern = "(?:^([0-9]+);([0-9]+);([0-9]+)$|^.*:([0-9]+)\s.*:([0-9]+).*:([a-zA-Z0-9]+)$)" If strPattern "" Then strInput = C.Value
34 2023-10-05
编程技术问答社区
如何在捕获组中选择性地添加逗号和空白?
我试图在文本的每个块中匹配五个子字符串(总共有100个块). 我匹配了99%的文本块,但有关第3和4组的错误. 这是一个演示链接:第3组是"语音的部分",第4组是英语翻译. 在文本的第一个块中,det, pro都应在第3组中,然后the; him, her, it, them应在第4组中. 同一问题再次发生在文本的第三个块中. 第3组应为adj, det, nm, pro,第4组应为a, an, one. 这是我的模式: ([0-9]+)\s+(\w+(?:, \w+)?)\s+(\N+?)\s+(\H.+).*?\r?\n•\s+([\s\S]*?)\s+[0-9]+\s\|.*\s* 解决方案 voici ... /^(\d+) +(\w+) +([acdefijlmnoprtv()]+(?:, ?[acdefijlmnoprtv()]+)*) +([\S\s]+?)\n\x{2022} +([\S\s]+?)\n\d+ \| [-\
18 2023-10-05
编程技术问答社区
不能在re.sub() repr表达式的函数调用中使用'(1'反向引用捕获组
我有一个字符串S = '02143'和一个列表A = ['a','b','c','d','e'].我想在's'中替换所有这些数字,并用列表A中的相应元素. 例如,将0替换为A[0],2用A[2]等等.最终输出应为S = 'acbed'. 我尝试了: S = re.sub(r'([0-9])', A[int(r'\g')], S) 但是,这给出了一个错误ValueError: invalid literal for int() with base 10: '\\g'.我想它将BackReference '\g'视为字符串.如何特别使用re.sub和捕获组解决这个问题,否则? 解决方案 re.sub(r'([0-9])',A[int(r'\g')],S)不起作用的原因是\g(这是第一个反向的明确表示,否则写为\1)backReference仅在 string替换模式中使用时才能起作用.如果将其传递给另一种方法,它将"看到"仅\g
20 2023-10-05
编程技术问答社区
Regex 匹配捕捉组内的文本
示例文本: \- !ruby/object:DynamicAttribute attributes: resource_id: "1" resource_type: Applicant string_value: "Michael" int_value: id: "35972390" date_value: name: first_name attributes_cache: {} \- !ruby/object:DynamicAttribute attributes: resource_id: "1" resource_type: Applicant string_value: "Johnson" int_value: id: "35533149" date_value: name: last_name attributes_cache
42 2023-08-21
编程技术问答社区
支持命名捕获的 Ruby 正则表达式匹配枚举器
考虑这样的字符串以提取时间信息: str = "Sun rises at 6:23 am & sets at 5:45 pm; Moon comes up by 7:20 pm and goes down by 3:45 am" 我希望有一个枚举者,例如扫描,但可以使我获得 matchdata 对象,而不是扫描中可用的数组. 例如,我可以写: str.scan( /(?\d:\d{2}) (?am|pm)/ ){ |arr| p arr } 获得: ["6:23", "am"] ["5:45", "pm"] ["7:20", "pm"] ["3:45", "am"] 但是,我想知道是否有这样的事情: str.match_all( /(?\d:\d{2}) (?am|pm)/ ){ |md| p md } 获得: #
22 2023-08-16
编程技术问答社区
后处理输出文件时使用 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) 现在,我想为Perl编写一条正则是perl,这使我能够捕获列表中的ITH值.所以我当前的设置是folloiwng $_ =~ ^\s+\d+\s+(\d+[.]\d+E[+]\d+); my $temp = $1; 这将使我获得第一个数字.如果我愿意的话,我希望能够捕获第七或第50个,而不必写一个非常长的正则表达式. 是否有一种简洁的方式? 预先感谢. 解决方案 使用 split split my @cols = split ' ', $_; my $seventh = $cols[6]; my $fiftieth = $cols[49]; 其他解决方案 拆分是这种情况的最佳选择.
14 2023-08-16
编程技术问答社区
将正则表达式中的捕获组解析成树状的代码
我需要识别(潜在嵌套)在正则表达式中捕获组并创建树.特定目标是Java-1.6,我理想地喜欢Java代码.一个简单的例子是: "(a(b | c)d(e(f*g))h)" 将解释为 "a(b|c)d(e(f*g))h" ... "b|c" ... "e(f*g)" ... "f*g" 理想情况下,解决方案应解释计数表达式,量词等和逃逸水平.但是,如果这不容易找到更简单的方法可能就足够了,因为我们可以限制所使用的语法. 编辑.澄清.我想解析正则表达式字符串本身.要这样做,我需要知道BNF或Java 1.6 Regexes的BNF或同等标准.我希望有人已经做到了. 结果的副产品将是该过程将测试正则有效性. 解决方案 考虑加入实际解析器/lexer: 看起来很复杂,但是如果您的语言相当简单,则相当简单.如果不是这样,在以下方面进行操作可能会使您的生活成为地狱:) 其他解决方案 我想出了使用XML工具(XOM, http:///wwww
54 2023-08-06
编程技术问答社区
为什么我的正则表达式捕获组在匹配多个部分时只捕获字符串的最后一部分?
我尝试的 var test = "asdfdas ABCD EFGH"; var regex = /^\S+( [A-Z]{4})+$/; // Also tried: /^\S+( [A-Z]{4})+$/g // And: /^\S+( [A-Z]{4})+?$/g var matches = test.match(regex); 我做了 jsfiddle . 我期望的 变量matches应该成为此数组: [ "asdfdas ABCD EFGH", " ABCD", " EFGH" ] 我得到的 变量matches实际上是此数组: [ "asdfdas ABCD EFGH", " EFGH" ] 我的想法 我的猜测是,捕获组和/或$逻辑中缺少一些东西.任何帮助,将不胜感激. (我知道我可以在多个正则表达式中弄清楚如何做到这一点,但是我想了解这里发生的事情.) 解决方案 是的,这正是它
46 2023-08-05
编程技术问答社区
正则表达式捕捉未知数量的重复组
我尝试编写一个正则表达式以在Java程序中使用,该程序将识别出可能出现在输入中的模式未知次数.我愚蠢的小例子是: String patString = "(?:.*(h.t).*)*"; 然后,我尝试通过通过matcher.group(i)循环循环来访问"小屋是热"等线的匹配.它仅记得上一场比赛(在这种情况下,"热"),因为只有一个捕获组 - 我猜匹配器的内容.集团(1)在重复使用捕获组的情况下被覆盖.不过,我想要的是包含 " hut"和" hot"的某种数组. 有更好的方法吗? fwiw,我真正要做的是在信号词之后拿起所有(可能是多词的)专有名词,其中可能还有其他单词和标点符号.因此,如果"锯"是信号,我们有"我看到鲍勃和约翰·史密斯和他的妻子玛格丽特,"我想要{"鲍勃","约翰·史密斯","玛格丽特"}. 解决方案 (类似的问题:正则表达式带有可变数字的正则表达式组?) 这是不可能的.您最好的替代方法是使用h.t,并使用 while (match
16 2023-08-05
编程技术问答社区
使用动态RegExp获取$1捕获组
我很好奇,如果有人知道我在这里做错了什么.我想在表达式内使用一个变量,但是由于某种原因,我尝试使用$1. 这正确返回: $('.content').html(function(_,i) { return i.replace(/(cat)/gi, '$1'); }); 由于某种原因,这不是: $('.content').html(function(_,i) { var customVariable = 'cat'; var pattern = new RegExp(customVariable,'gi'); return i.replace(pattern, '$1'); }); 我很新来捕获Regexp中的组,我找不到其他人遇到这个问题,所以我认为我缺少一些非常简单的东西. 解决方案 您忘记了括号: var p
28 2023-08-05
编程技术问答社区
识别Regex模式中的捕获组
Java(也许还有一个开源库)是否有一种方法来识别java.util.regex.Pattern中的捕获组(即在创建匹配器之前) Java文档的示例: 捕获组编号 计算他们的开头括号 从左到右.在表达中 ((a)(b(c))),例如 四个这样的组: 1 ((A)(B(C))) 2 (A) 3 (B(C)) 4 (C) 原则上应该可以从(编译)模式中识别这些. 更新: 从@Leniel和Eslewhere中,似乎该设施("命名组")将于2011年中期出现在Java 7中.如果我迫不及待地等待我可以使用Jregex,尽管我不太确定API是什么. 解决方案 您可以通过创建虚拟匹配器来找到组的数字,例如: Pattern p = Pattern.compile("((A)(B(C)))"); System.out.println(p.matcher("").groupCount());
16 2023-08-05
编程技术问答社区
在 R'正则表达式中,是否有与"&"相当的用于反向引用整个匹配的表达式?
当我使用vim时,我经常使用&在替换中进行整个比赛.例如,以下将" foo"的所有实例替换为" foobar": %s/foo/&bar/g 这里的好处是懒惰:我不必在比赛中键入括号,我只需要键入一个字符,而不是两个字符即可进行替代.也许更重要的是,我在输入比赛时没有弄清楚我的背部,减少了认知负荷. 是否有等同于&我在r的正则表达式中使用的vim(也许使用perl = T参数)? 解决方案 base r sub/gsub functions :答案是 no ,请参见此参考: 整体匹配没有替换文本令牌.将整个正则施以捕获组中,然后使用\1插入整个正则匹配. 在stringr包装中:是的,您可以使用\0: > library(stringr) > str_replace_all("123 456", "\\d+", "START-\\0-END") [1] "START-123-END START-456-END" 其他解决方案 我们可以使用g
22 2023-08-05
编程技术问答社区
为什么re.groups()不会为我的一个正确匹配的组提供任何东西?
运行此代码时: print re.search(r'1', '1').groups() 我得到()的结果.但是,.group(0)给了我比赛. 不应该给我一些包含比赛的东西吗? 解决方案 组为空,因为您没有任何捕获组 - docs.python.org/library/re.html#re.matchobject.groups . (0)始终将返回匹配的整个文本,无论是否在组中捕获 编辑. 其他解决方案 据我所知,.groups()返回了记住的组的元组. IE.括号中封闭的正则表达式中的那些组.因此,如果您要写: print re.search(r'(1)', '1').groups() 您会得到 ('1',) 作为您的回复.通常,.groups()将返回括号内的正则表达式中所有对象组的元组. 其他解决方案 这样做的原因是您没有捕获组(因为您不在模式中使用()). http://docs.pypython.org/lib
48 2023-08-04
编程技术问答社区
C++11的Regex捕获组的名称
我将基于增强的正则表达式转换为C ++ 11 Regex.我有一个称为url的捕获组: \s*?=\s*?(("(?.*?)")|('?.*?)')) 使用Boost,如果您有一个smatch,则可以致电match.str("url")以按名称获取捕获组.使用std::smatch,我只看到索引子匹配. 如何使用std :: smatch类访问URL捕获? 解决方案 您不能用C ++ 11标准命名捕获组. C ++ 11 Regex符合Ecmascript语法.这是一个解释它的链接ecmascript/.即使您考虑到真正的正则表达式,这可能会令人失望,这将是额外的.
22 2023-08-04
编程技术问答社区
捕获组在NSRegularExpression中不工作
为什么此代码仅吐出整个正则匹配而不是捕获组? 输入 @"A long string containing Name: A name here amongst other things" 输出预期 A name here 实际输出 Name: A name here 代码 NSString *htmlString = @"A long string containing Name: A name here amongst other things"; NSRegularExpression *nameExpression = [NSRegularExpression regularExpressionWithPattern:@"Name: .*\">(.*) " options:NSRegularExpressionSearch error:nil];
18 2023-08-04
编程技术问答社区
python re.sub替代模式
我想为re.sub提供替代的替换模式. 假设我有两个搜索模式作为替代方案,例如: re.sub(r"[A-Z]+|[a-z]+", replacementpattern, string) ,而不是提供一种替换模式,我想以某种方式捕获哪种搜索模式替代方案并提供替代替换模式. 这可能吗? 谢谢. ps.这里的代码细节无关紧要,这是一个一般的问题. 解决方案 您可以将功能传递给re.sub().在功能中,您可以根据捕获的组返回所需的值.一个简单的插图代码: >>> def fun(m): ... if m: ... if m.group(1): ... return 'x' ... else: ... return 'y' >>>print re.sub(r"([A-Z]+)|([a-z]+)", fun , "ab") 功能fun()检查匹配是否成功并基于捕获的组,返回替换字符串.如果匹配[A-Z]+
32 2023-08-04
编程技术问答社区
正则表达式重复捕获组
我试图弄清楚如何在以下URL字符串中重复comma-separated值上的捕获组: id=1,2;name=user1,user2,user3;city=Oakland,San Francisco,Seattle;zip=94553,94523; 我正在使用此RegExp它是我想要的返回结果,除了值,因为它们是动态的.可能是URL参数中的2,3,4等用户,并且想知道我是否可以为每个值创建一个捕获组,而不是user1,user2,user3作为一个捕获组. regexp: (^|;|:)(\w+)=([^;]+)* 这是使用 regexp regexp 示例输出: group1-(Semi -Colon,Colon) group2-(键,即id,名称,城市,zip) group3 - (value1) group4-(value2) *如果存在 group5-(value3) *如果存在 group6-(value4) *如果存在 等.
22 2023-08-04
编程技术问答社区