Tag: 正则表达式

计数正则表达式替换(C#)

有没有办法计算Regex.Replace调用的替换次数? 例如Regex.Replace(“aaa”, “a”, “b”); 我想得到3号(结果是”bbb” ); for Regex.Replace(“aaa”, “(?aa?)”, “${test}b”); 我想得到2号(结果是”aabab” )。 我能想到的方法是这样做的: 使用MatchEvaluator递增捕获的变量,手动执行替换 获取MatchCollection并迭代它,手动执行替换并保持计数 首先搜索并获取MatchCollection,从中获取计数,然后单独替换 方法1和2需要手动解析$替换,方法3需要正则表达式匹配字符串两次。 有没有更好的办法。

RegEx – 重用子表达式

假设我有一个匹配hex32位数的正则表达式: ([0-9a-fA-F]{1,8}) 当我构建一个正则表达式,我需要多次匹配,例如 (?[0-9a-fA-F]{1,8})\s*:\s*(?[0-9a-fA-F]{1,8}) 我是否每次都必须重复子表达式定义,或者有没有办法“命名和重用”它? 我想象一下( 警告,发明语法! ) (?{hexnum=[0-9a-fA-F]{1,8}})\s*:\s*(?{=hexnum}) 其中hexnum=将定义子表达式“hexnum”,而{= hexnum}将重用它。 因为我已经了解它很重要:我使用.NET的System.Text.RegularExpressions.Regex ,但一般的答案也很有趣。

什么是“嵌套量词”,为什么它导致我的正则表达式失败?

我有这个正则表达式,我在正则表达式伙伴中构建和测试。 “_ [ 0-9]{10}+ {1}+[ 0-9]{10}+ {2}+[ 0-9]{6}+ {2}[ 0-9]{2}” 当我在.Net C#中使用它时 我收到了例外 “parsing \”_ [ 0-9]{10}+ +[ 0-9]{10}+ +[ 0-9]{6}+ [ 0-9]{2}\” – Nested quantifier +.” 这个错误是什么意思? 显然.net不喜欢这个表达。 这是正则表达式的伙伴,所以你可以用正则表达式理解我的意图…… _ [ 0-9]{10}+ {1}+[ 0-9]{10}+ {2}+[ 0-9]{6}+ {2}[ 0-9]{2} Match the characters “_ ” literally «_ » Match a single character present in the list […]

C#正则表达式从youtube和vimeo获取videoID由url

我正忙着创建两个正则表达式来过滤来自youtube和vimeovideo的id。 我已经有了以下表达式; YouTube: (youtube\.com/)(.*)v=([a-zA-Z0-9-_]+) Vimeo: vimeo\.com/([0-9]+)$ 正如我在下面解释的那样,有两种类型的url与我已经创建的正则表达式匹配。 来自Vimeo和YouTube的其他几种url并未被表达所覆盖。 我最喜欢的是所有这些都可以用两个表达式来涵盖。 一个适用于所有Vimeovideo,一个适用于所有YouTubevideo。 我一直在忙着尝试一些不同的表达方式,但到目前为止还没有成功。 我还在努力掌握正则表达式,所以我希望我能以正确的方式来帮助我! 如果需要更多信息,请告诉我! VIMEOurl不匹配: http://vimeo.com/channels/hd#11384488 http://vimeo.com/groups/brooklynbands/videos/7906210 http://vimeo.com/staffpicks#13561592 YOUTUBEurl不匹配 http://www.youtube.com/user/username#p/a/u/1/bpJQZm_hkTE http://www.youtube.com/v/bpJQZm_hkTE http://youtu.be/bpJQZm_hkTE 匹配的url http://www.youtube.com/watch?v=bWTyFIYPtYU&feature=popular http://vimeo.com/834881 我们的想法是将上面提到的所有url与两个正则表达式相匹配。 一个用于vimeo,一个用于youtube。 在回答后更新Sedith: 这就是我的表达式现在的样子 public static readonly Regex VimeoVideoRegex = new Regex(@”vimeo\.com/(?:.*#|.*/videos/)?([0-9]+)”, RegexOptions.IgnoreCase | RegexOptions.Multiline); public static readonly Regex YoutubeVideoRegex = new Regex(@”youtu(?:\.be|be\.com)/(?:(.*)v(/|=)|(.*/)?)([a-zA-Z0-9-_]+)”, RegexOptions.IgnoreCase); 在我的代码中 var youtubeMatch = url.match(YoutubeVideoRegex ); var […]

为什么\ b与使用.net正则表达式的单词不匹配

要查看常规表达,我会阅读本教程 。 无论如何,该教程提到\b匹配单词边界(\ w和\ W字符之间)。 该教程还提供了一个链接,您可以在其中安装expresso(在创建正则表达式时有帮助的程序)。 所以我在expresso中创建了我的正则表达式,并且我做了一个匹配。 现在,当我将相同的正则表达式复制到visual studio时,我没有得到匹配。 看一看: 为什么我没有比赛? 在即时窗口中,我显示了变量输出的内容。 在expresso我做了一场比赛,在视觉工作室,我没有。 为什么?

如何从c#中的字符串中提取十进制数

string sentence = “X10 cats, Y20 dogs, 40 fish and 1 programmer.”; string[] digits = Regex.Split (sentence, @”\D+”); 对于这个代码,我得到数字数组中的值,如10,20,40,1 string sentence = “X10.4 cats, Y20.5 dogs, 40 fish and 1 programmer.”; string[] digits = Regex.Split (sentence, @”\D+”); 对于这个代码,我得到数字数组中的值,如10,4,20,5,40,1 但我喜欢这样的10.4,20.5,40,1十进制数如何才能做到这一点。

正则表达式,其中字符串的一部分必须在0到100之间

我需要validation序列号。 为此,我们在C#中使用正则表达式,而某个产品,序列号的一部分是“午夜以来的秒”。 一天有86400秒,但如何在此字符串中将其validation为5位数字?: 654984051-86400-231324 我无法使用这个概念: [0-8][0-6][0-4][0-0][0-0] 因为那时86399无效。 我怎么能克服这个? 我想要的东西: [00000-86400] UPDATE 我想清楚地表明我已经意识到 – 并且同意 – “当有一种更简单的方法时,不要使用正则表达式” 。 Jason的答案正是我想要做的,但是这个序列号validation适用于通过我们系统的所有序列号 – 目前还没有针对这些特定序列号的自定义validation码。 在这种情况下,我有充分的理由寻找正则表达式解决方案。 当然,如果没有一个,那么这对于这些特定产品的自定义validation的情况是不可否认的,但我想在使用需要更改代码的解决方案之前完全探索这个途径。

是否有一种优雅的方法来解析单词并在大写字母之前添加空格

我需要解析一些数据,我想转换 AutomaticTrackingSystem 至 Automatic Tracking System 基本上在任何大写字母之前放置一个空格(当然除了第一个)

改进/修复C样式块注释的正则表达式

我正在编写(在C#中)一个简单的解析器来处理一个看起来很像经典C的脚本语言。 在我拥有的一个脚本文件中,我用来识别/ *阻止注释* /的正则表达式将进入某种无限循环,占用100%的CPU。 我正在使用的正则表达式是这样的: /\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/ 为什么会被锁定的任何建议? 或者,我可以使用的另一个正则表达式是什么? 更多信息: 使用面向.NET 3.5的C#3.0; 我正在使用Regex.Match(string,int)方法在字符串的特定索引处开始匹配; 我让程序运行了一个多小时,但比赛没有完成; 传递给Regex构造函数的选项是RegexOptions.Multiline和RegexOptions.IgnorePatternWhitespace ; 正则表达式适用于我的453个测试文件中的452个。

正则表达式嵌套括号

我有以下字符串: a,b,c,de(f,g,h,i(j,k)),l,m,n 会不会告诉我如何构建一个正则表达式,只返回括号的“第一级”,如下所示: [0] = a,b,c, [1] = de(f,g,h,ij(k,l)) [2] = m,n 目标是保持括号中具有相同索引的部分嵌套以操纵未来。 谢谢。 编辑 试图改进这个例子…… 想象一下,我有这个字符串 username,TB_PEOPLE.fields(FirstName,LastName,TB_PHONE.fields(num_phone1, num_phone2)),password 我的目标是将字符串转换为动态查询。 那么不以“TB_”开头的字段我知道它们是主表的字段,否则我知道括号内的信息字段与另一个表相关。 但是我很难检索所有字段“第一级”,因为我可以将它们从相关表中分离出来,我可以递归地恢复剩余的字段。 最后,会有类似的东西: [0] = username,password [1] = TB_PEOPLE.fields(FirstName,LastName,TB_PHONE.fields(num_phone1, num_phone2)) 我希望我已经解释得更好了,抱歉。