我有一些复杂的正则表达式,我需要评论它们的可读性和维护性.Java规范相当简洁,我努力工作很长时间.我终于发现了我的错误,并将其作为答案发布,但我很感激有关维护正则表达式的任何其他建议
作为一个例子,我想在一个简单的名称解析器中注释(patternS)的子组件:
String testTarget = "Waldorf T. Flywheel";
String patternS = "([A-Za-z]+)\\s+([A-Z]\\.)?\\s+([A-Za-z]+)";
Pattern pattern = Pattern.compile(patternS, Pattern.COMMENTS);
Assert.assertTrue(pattern.matcher(testTarget).matches());
Run Code Online (Sandbox Code Playgroud)
编辑:我也很感谢(?x)格式的例子.
编辑:@ geowa4有一个很好的建议,避免嵌入的评论.Sinnce java和其他人提供了嵌入式注释它们有用的情况是什么?(我想我有一个案子,但我有兴趣看到其他人).
编辑:正如下面提到的@mikej,正则表达式不支持可选的初始井,并且会更好:
String patternS = "([A-Za-z]+)\\s+([A-Z]\\.\\s+)?([A-Za-z]+)";
Run Code Online (Sandbox Code Playgroud)
但这最终会在最初提取空间
每当我看到任何复杂的正则表达式时,我的眼睛就会开始流水.是否有任何现有的解决方案为正则表达式中的不同类型的符号赋予不同的颜色?
理想情况下,我希望对文字字符,转义序列,类代码,锚点,修饰符,前瞻等进行不同的突出显示.显然,语法在不同语言之间略有不同,但这是稍后要处理的皱纹.
如果这可以某种方式与语法突出显示Vim与使用正则表达式的任何语言共存时的加分点.
这是存在于某个地方,还是我应该在那里制作它?
这个关于正则表达式可维护性问题的答案提到了.NET用户在正则表达式中实现注释的能力(我对第二个例子特别感兴趣)
有没有一种简单的原生方式在python中重现这个,最好不需要安装第三方库或编写我自己的注释条算法?
我目前所做的与该答案中的第一个示例类似,我将多个行中的正则表达式连接起来并对每一行进行注释,如下例所示:
regexString = '(?:' # Non-capturing group matching the beginning of a comment
regexString += '/\*\*'
regexString += ')'
Run Code Online (Sandbox Code Playgroud) 我有一个正则表达式,用于验证英国邮政编码,但现在我想提取代码的组成部分,我感到困惑.对于那些不知道英国邮政编码的例子的人是'WC1 1AA','WC11 1AA'和'M1 1AA'.
下面的正则表达式(格式化道歉)处理\s{0,}
左侧和右侧部分之间缺少空格(这是位)并且仍然有效(这很好).
(?:(?:A[BL]|B[ABDHLNRST]?|C[ABFHMORTVW]|D[ADEGHLNTY]|E[CHNX]?|F[KY]|G[LUY]?|H[ADGPRSUX]|I[GMPV]|JE|K[ATWY]|L[ADELNSU]?|M[EKL]?|N[EGNPRW]?|O[LX]|P[AEHLOR]|R[GHM]|S[AEGKLMNOPRSTWY]?|T[ADFNQRSW]|UB|W[ACDFNRSV]?|YO|ZE)\d(?:\d|[A-Z])?\s{0,}\d[A-Z]{2})
Run Code Online (Sandbox Code Playgroud)
我希望能够现在提取左侧和右侧,我知道括号用于此,但是那里已经有括号,并且正则表达式规范不易阅读.所以我想这些括号需要更换,任何人都可以帮我修改括号吗?
我可以看到其他人会发现这个使用正则表达式,所以请随意使用它来验证英国邮政地址.