对于我的实习,我被要求创建一个工具,通过几个例子创建一个正则表达式。现在我开始工作,它会生成多个正则表达式,并根据它们的贪婪程度进行排序,但我想要更多。
正则表达式生成器的工作原理是用正则表达式字符类替换字符串的一部分。例如,GOM178
将变为[A-Z]+178
(已替换字母)或GOM\d+
(已替换数字)。困难的部分是将多个字符类合二为一。例如,在某一点上\p{P}
也会被尝试,它会替换[],/\-
等等。这导致其他角色类陷入困境。它将在[A-Z]
中转为\p{P}A\p{P}Z\p{P}
。在\p{P}
之前替换[A-Z]
也不会有效,因为这会替换导致此P
的{{1}}中的\p{P}
。
我已经尝试过负面的前瞻,但这并不能很好地锻炼。它目前工作的唯一原因是因为我在保存结果之前测试它。这是我用过的正则表达式:
\p{[A-Z]}
以下是正则表达式的示例:Link to example。
如您所见,它还匹配字符类中的(?:(?!(?:\[a-z\]|\[A-Z\]|\[a-zA-Z\]|\\d\+\[\\\.,\]\?\\d\*|\\d|\\s|\\p\{P\}|\\w|\\n|\.)(?:\*|\?|\+|\+\?|\*\?)?)(<The character class to match goes here>))
和-
。它应该忽略它,因为它是]
的一部分,在负向前瞻中会注明。
长话短说,当字符串在特定的上下文中时,不应该替换它。有没有人知道如何解决这个问题,或者对如何做到这一点有更好的了解。