拆分带有一些字符的字符串以及一些被忽略的字符

时间:2017-11-10 09:41:18

标签: c# regex

有一个字符串:"QARR_1 * QARR_1 * NPSH[*] + NPSH0"。我想把它分成一个字符串数组(恰好是4个项目),以得到输出:QARR_1,QARR_1,NPSH [*],NPSH0。

我明白,我应该在这里使用Regex环视概念,但是,我无法达到预期的效果。请帮助。

3 个答案:

答案 0 :(得分:2)

我认为你可以这样做而没有外表:

(\w+(?:\[\*\])?)

Test

http://rextester.com/YHNRC51736

  • 有资格的小组(
  • 获取或更多字词\w+
  • 使用可选的非捕获组(?:\[\*\])?

答案 1 :(得分:1)

import re
a = "QARR_1 * QARR_1 * NPSH[*] + NPSH0"
x= re.split(' \* | \+ ',a)
print x

['QARR_1','QARR_1','NPSH [*]','NPSH0']

答案 2 :(得分:1)

嗯,好吧......这适用于我使用的正则表达式工具:

\w+\[?\*?\]?

不是最优雅,但非常简单,只要输入不会像:" Abc12 *]"," abc12 []"等等

工作原理:

  • \w+这将贪婪地捕获任何单词字符序列(一直捕捉,直到它用完匹配的字符),基本上转换为:[a-zA-Z0-9_]+
  • \[?\*?\]?好吧,首先,此处的反斜杠用作转义字符,以使Regex真正查找字符[,{ {1}}和*。它们需要被转义,因为它们在Regex语法中具有特殊含义。每个部分末尾的]告诉正则表达式模式匹配0到1次之间的字符。有必要能够捕获它0次,以允许在最后进行不具有字符(?[*)的匹配。

它将匹配的一些事例:

  • ]
  • apples123_121231_2133414[*]
  • Ap1]
  • Orange_11[*

它赢得的各种事物的几个例子: (注意,突出显示部分单词的情况,只匹配突出显示的部分。)

  • 1ba222nnana*] * [
  • ++++ !!〜+
  • Pares]]
  • 111Grapes[] *

所以,鉴于你提供的输入,它应该没问题......这些只是一些需要注意的事项。