概述:我需要一个正则表达式(RE),它将查找给定有序集中的字符,这些字符无序地出现在目标字符串中。这是布局:
我有以下有序多字符的字符或字符对(multiset,因为第一个和最后一个元素是相同的),每个元素在目标字符串中最多可以按照集合中给出的顺序出现一次: ---例外:^
可以连续出现两次,单v
(未与.
配对)可以出现在任一端或两端。 (请注意,|
字符在集合中不是,但通常会出现在目标字符串中。)
# Ordered multiset of characters that should appear in target string
{v, v., <, .\, \, \., ^, ./, /, /., >, .v, v}
以下是不出错的典型目标字符串:
# Typical target string
v.A|<B2|\T|E^|D|E^|A/.|B2>
请注意,字符串中出现执行的有序多集中的字符按照集合中给出的顺序出现。现在,用户将输入这些字符串(间接通过GUI),并且用户可能会犯错误。例如,他/她可以省略一个|
字符(我已经有了RE),或者他/他可以按顺序输入有序集中的字符。 这是我在这里询问的情况。这是一个类似于第一个字符串的字符串,但是有一个订单错误:
# Target string with an error
v.A|<B2|\T|E^|D|E^|A>|B2/.
请注意,字符串右端附近的>
和/.
字符显示为乱序。 (另请注意,^
有效地出现两次。)我需要构建一个RE,用于测试给定字符串中有序集合中的项目是否无序。以下是我在工作中遇到的一些例子:
# Three "real life" target strings
1. <A|vE2|B|D/|A>
2. <E|C^|\T|C|E>|T2/
3. vC2|\G|<L|B|L>|Gv
第一个字符串有一个订单错误,第二个字符串有两个,第三个字符串有一个。 需要注意的一些事项: 1)对于有多个错误的字符串,从技术上讲,我只需要知道该字符串至少有一个错误,但知道所有错误都是奖励; 2)单个v
(不是v.
或.v
)只能出现在字符串的两端或两端,如上面的第三个示例所示; 3)经常出现简单的目标字符串,例如<A
或|B|A/
或|B|
,只有一个或没有字符集,并且RE必须能够将这些字符串处理为有效案件,即不匹配。
我已经有一个RE有三个替代方案可以测试其他类型的错误,所以我在这里寻求的RE将成为另一种选择。我怀疑我将不得不在其自己的替代方案中处理单个v
案例而在另一个案例中处理其他设置项目。 (我也意识到备选方案的顺序也很重要。)
所以,对此有任何帮助将不胜感激。我已经尝试了很多从简单到复杂的RE,但是它已经无处可去,但是在兔子洞里,现在我很困惑。