c# - 正则表达式匹配排列序列
问题描述
给定一组 n 个字符,我们需要什么正则表达式来匹配这些字符的 0-x 排列序列?
我们想要排列。给定一组 3 个字符 A、B、C,我们要匹配 ABC、ACB、BAC、BCA、CAB、CBA。
但是,我们想要匹配这些排列的序列。序列可能包含0个或多个排列,意味着我们要匹配空字符串,ABC,ABCCA,BACCAB,BCAABCCBAABC等。
我能够找到匹配排列的解决方案,但无法修改它以匹配排列序列。
我知道有时使用的正则表达式引擎可能会有所不同。我想在 C# 的Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.Matches
方法中使用这个正则表达式,如果这会有所作为。我们只是想检查测试方法的输出字符串是否匹配这个正则表达式,即是给定字符集的排列序列。
解决方案
我不能太推荐1在这里使用正则表达式!
n = 3
当 for和字符是'A'
,'B'
和时,您可以使用以下正则表达式来测试字符串的一致性'C'
:
/^(?:([ABC])(?!\1)([ABC])(?!\1|\2)[ABC])*$/
正则表达式可以通过以自由间距模式编写来进行自我记录:
/
^ # match beginning of line
(?: # begin non-capture group
([ABC]) # match 'A', 'B' or 'C' in capture group 1
(?!\1) # next character cannot be the content of capture group 1
([ABC]) # match 'A', 'B' or 'C' in capture group 2
(?!\1|\2) # next character cannot be the content of capture group 1 or 2
[ABC] # match 'A', 'B' or 'C'
) # end non-capture group
* # execute non-capture group 0+ times
$ # match end of line
/x # free-spacing mode
(?!\1|\2)
是负前瞻。
我使用了行首和行尾锚点来促进链接测试,但字符串首尾锚点会更合适(\A
和\z
)。
1 意为字面解释。
推荐阅读
- c++ - 如何找出成员函数属于哪个类
- python - 使用 pyautogui 查找特定的 RGB 颜色并自动单击它
- firebase - 从 Web 应用程序在 Firestore 中添加文档不起作用并且不返回错误
- ajax - p:resetInput 与 p:ajax resetValues=true 有什么区别?
- bash - 如何在从文本文件中读取行以提取部分并重新排列输出时结合 awk 和 sed
- r - 使用具有层次聚类的距离矩阵查找聚类数
- javascript - 如何使后退按钮文本正确显示使用 URL 方案打开的应用程序中的最后一个应用程序的名称?
- c# - 尝试通过和迁移共享数据库上下文时出错
- regex - 如何使用引号作为转义序列将值与字符串分开?
- aspnetboilerplate - 管道构建 devops