2017-11-10 23 views
-1

文字列:"QARR_1 * QARR_1 * NPSH[*] + NPSH0"があります。 QARR_1、QARR_1、NPSH [*]、NPSH0のように出力を得るために、文字列配列(正確には4つの項目)に分割します。無視された文字を含むいくつかの文字で文字列を分割する

ここでRegexのルックアライメントの概念を使用する必要がありますが、希望する結果を得ることができません。親切に助けてください。

+0

したがって、「」に分割したいとします。 '?それともそれほど単純ではないのですか? – AakashM

+0

@AkashM、数式演算子(+、 - 、\ *、/)に分割したいが、\ [\ * \]ではない。 – WpfBee

答えて

2

は、私はあなたが前後参照せずに、このようにそれを行うことができると思う:

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

Test

http://rextester.com/YHNRC51736

  • capuredグループ(
  • 取得以上の単語文字任意の非捕捉基と10
  • (?:\[\*\])?
+0

パターンが文字列を部分文字列に分割していることを、 – WpfBee

+0

このパターン '\ w +(?:\ [\ * \])? 'が一致するグループを取得します。提供されたデータの場合、これは4回一致します。 –

+0

ありがとうございました。したがって、キャプチャされていないグループの形式は(?:..)で始まる必要がありますか? – WpfBee

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

[ 'QARR_1'、 'QARR_1'、 'NPSH [*]'、 'NPSH0']

1

よく、うーんこれは私が使用する正規表現ツールで動作します。

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

ない最もエレガントな、しかし非常に単純なので、長い入力が壊れていないようように:「ABC12 *]」、「ABC12 []」など

仕組み:これは欲張って、基本的に変換、(それが一致する文字がなくなるまで捕捉し続ける)単語任意の文字列をキャプチャします

  • \w+[a-zA-Z0-9_]+
  • \[?\*?\]?よく始めると、バックスラッシュはエスケープ文字として使用され、Regexは文字通り文字[,*および]を探します。 Regexの構文では特別な意味を持つため、エスケープする必要があります。各部分の末尾にある?は、0と1の間の文字と一致するようにRegexパターンを指示します。最後に文字([*])を持たない一致を可能にするために、それを0回捕らえる必要があります。

物事の種類のいくつかの例では一致します。

  • apples123_121231_2133414[*]
  • Ap1]
  • Orange_11[*
  • 1ba222nnana*]

物事の種類のいくつかの例には一致しません: (ノート、単語の一部が強調表示されている例を、唯一のハイライト部が一致します。)

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

ので、与えられた入力ヨーヨーあなたが知っておくべきことのほんの一部です。

+0

希望の結果を得る。あなたの答えを親切に説明してください。 – WpfBee

+0

私には分かります。 –

+0

ありがとう、それは今私にとって意味がある。 – WpfBee

関連する問題