用括号分割字符串的正则表达式

Pia*_*swi 1 c# regex

需要有关 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# 替换它。

我想分两步做——首先是基于括号的拆分,然后是单词拆分。

我想把这些案例作为错误的输入扔掉 -

  1. 仅开始或结束括号可用

  2. 嵌套括号

总的来说,我只想拆分格式良好(如果有开始括号,则必须有结尾)仅输入。

Nic*_*ick 5

这是一个正则表达式,它将从您的示例中给出正确的结果:

\s(?=.*?(?:\(|\{|\[).*?(?:\]|\}|\)).*?)|(?<=(?:\(|\[|\{).*?(?:\}|\]|\)).*?)\s
Run Code Online (Sandbox Code Playgroud)

此正则表达式分为两部分,由|(OR) 语句分隔:

  1. \s(?=.*?(?:\(|\{|\[).*?(?:\]|\}|\)).*?) - 在(), [], 或集合之前寻找空格{}
  2. (?<=(?:\(|\[|\{).*?(?:\}|\]|\)).*?)\s- 在(), [], 或之后寻找空白{}

下面是每个部分的分解:

第 1 ( \s(?=.*?(?:\(|\{|\[).*?(?:\]|\}|\)).*?))部分:

\s(?=.*?(?:\(|\{|\[).*?(?:\]|\}|\)).*?)|(?<=(?:\(|\[|\{).*?(?:\}|\]|\)).*?)\s
Run Code Online (Sandbox Code Playgroud)

第 2 部分是同一件事,但它不是前瞻 ( (?=)) ,而是后视( (?<=))

作者问题编辑后:

对于将搜索仅包含完整括号的行的正则表达式,您可以使用以下命令:

.*\(.*(?=.*?\).*?)|(?<=.*?\(.*?).*\).*

您可以使用它来替换(and){and }or []因此您拥有完整的大括号和方括号。