需要有关 RegEx 的帮助。使用 C#。
括号中的一组词(圆形或方框或卷曲)应视为一个词。括号外的部分应根据空格 ' ' 进行拆分。
A) 测试用例 –
输入 - Andrew. (The Great Musician) John Smith-Lt.Gen3rd
结果(字符串数组)–
1. 安德鲁。
2. 伟大的音乐家
3. 约翰
4. Smith-Lt.Gen3rd
B) 测试用例 –
输入 - Andrew. John
结果(字符串数组)–
1. 安德鲁。
2. 约翰
C) 测试用例 –
输入 - Andrew {The Great} Pirate
结果(字符串数组)–
1. Andrew
2. The Great
3. Pirate
输入是一个人或任何其他实体的名称。当前的系统是用 Access 编写的非常古老的系统。他们通过逐个字符扫描来做到这一点。我正在用 C# 替换它。
我想分两步做——首先是基于括号的拆分,然后是单词拆分。
我想把这些案例作为错误的输入扔掉 -
仅开始或结束括号可用
嵌套括号
总的来说,我只想拆分格式良好(如果有开始括号,则必须有结尾)仅输入。
这是一个正则表达式,它将从您的示例中给出正确的结果:
\s(?=.*?(?:\(|\{|\[).*?(?:\]|\}|\)).*?)|(?<=(?:\(|\[|\{).*?(?:\}|\]|\)).*?)\s
Run Code Online (Sandbox Code Playgroud)
此正则表达式分为两部分,由|(OR) 语句分隔:
\s(?=.*?(?:\(|\{|\[).*?(?:\]|\}|\)).*?) - 在(), [], 或集合之前寻找空格{}(?<=(?:\(|\[|\{).*?(?:\}|\]|\)).*?)\s- 在(), [], 或之后寻找空白{}下面是每个部分的分解:
第 1 ( \s(?=.*?(?:\(|\{|\[).*?(?:\]|\}|\)).*?))部分:
\s(?=.*?(?:\(|\{|\[).*?(?:\]|\}|\)).*?)|(?<=(?:\(|\[|\{).*?(?:\}|\]|\)).*?)\s
Run Code Online (Sandbox Code Playgroud)
第 2 部分是同一件事,但它不是前瞻 ( (?=)) ,而是后视( (?<=))
作者问题编辑后:
对于将搜索仅包含完整括号的行的正则表达式,您可以使用以下命令:
.*\(.*(?=.*?\).*?)|(?<=.*?\(.*?).*\).*
您可以使用它来替换(and)和{and }or [,]因此您拥有完整的大括号和方括号。