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

标签 c# regex

需要有关 RegEx 的帮助。使用 C#。

括号中的一组词(圆形或方框或 curl )应被视为一个词。括号外的部分应根据空格 ' ' 进行拆分。

A) 测试用例——

输入 - 安德鲁。 (伟大的音乐家)John Smith-Lt.Gen3rd

结果(字符串数组)-
1. 安德鲁。
2. 伟大的音乐家
3.约翰
4. Smith-Lt.Gen3rd

B) 测试用例——

输入 - 安德鲁。约翰

结果(字符串数组)-
1. 安德鲁。
2.约翰

C) 测试用例——

输入 - Andrew {The Great} Pirate

结果(字符串数组)-
1.安德鲁
2.伟大
3.海盗

输入是一个人或任何其他实体的名字。当前系统是用 Access 编写的非常古老的系统。他们通过逐字符扫描来做到这一点。我正在用 C# 替换它。

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

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

  1. 只有开始或结束括号可用

  2. 嵌套括号

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

最佳答案

这是一个正则表达式,可以根据您的示例给出正确的结果:

\s(?=.*?(?:\(|\{|\[).*?(?:\]|\}|\)).*?)|(?<=(?:\(|\[|\{).*?(?:\}|\]|\)).*?)\s

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

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

这是每个部分的细目:

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

1. \s             - matches white space
2. (?=            - Begins a lookahead assertion (What is included must exist after the \s
3. .*?            - Looks for any character any number of times. The `?` makes in ungreedy, so it will grab the least number it needs
4. (?:\(|\{|\[)   - A non passive group looking for `(`, `{`, or `[`
5. .*?            - Same as #3
6. (?:\]|\}|\))   - The reverse of #4
7. .*?            - Same as #3
8. )              - Closes the lookahead.  #3 through #7 are in the lookahead.

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

作者编辑问题后:

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

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

你可以用它来代替(){}[]所以你有完整的大括号和方括号。

关于c# - 用括号分割字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15348828/

相关文章:

C#:使用 Excel.interop 获取单元格的值

python - Python 中的原始字符串和正则表达式

Java匹配字符串中的整个单词

c# - VS2013专业本地64位调试MSVSMON问题

c# - 使用 C# 抓取网页 (html)

javascript - 在 Javascript/JQuery 中用 <a href> 标签替换 [url] 标签

javascript - JavaScript 有类似 Perl 的翻译吗?

javascript - jQuery Regex 提取除 br、粗体、斜体和 a 之外的所有 HTML

c# - 使用 CaSTLe 动态代理拦截所有依赖项

c# - 在 Web App 中获取用户名