1

次のタイプの文字列があるとします。

"#First Thing ##Another One ## No Space#Main String #After Main ##EndString#"

#記号で囲まれたすべてのテキストを一致として返すことができる正規表現を考え出します。私に悲しみを与えていることの1つは、#記号が開始と終了の両方の区切り文字であるという事実です。正規表現での私の試みはすべて、文字列全体を返しました。もう1つの問題は、上記のサブストリング「メインストリング」で示されているように、ストリングの一部が#記号で囲まれていない可能性があることです。誰かアイデアはありますか?私はネガティブルックビハインドアサーションを少しいじってみましたが、それを機能させることができませんでした。#のグループの間にスペースがある場合とない場合がありますが、ある場合は無視します(それらと一致しません)。もう1つのオプションは、文字列パーサールーチンを作成することです。これはかなり簡単ですが、可能であれば正規表現を使用することをお勧めします。

4

3 に答える 3

2
/((#[^#]+#)|([^#]+))/

おそらく、上記のようなものがあなたが望むものと一致するでしょう。

これは、2つのハッシュの間のスペースに一致します。うーん。

/((#[^#]+#)|([^#]*[^#\s]+[^#]*))/

それは厄介なスペースを取り除くだろうと私は思います。

于 2011-06-17T03:02:33.157 に答える
1

[編集]

これがあなたに必要なものだと思います:

(?<=#)[^#]+?(?=#)

入力#First Thing# #Another One##No Space# Main String #After Main#が一致する場合:

  • First Thing
  • Another One
  • No Space
  • Main String
  • After Main

Thing#2番目の一致は、との間のスペース#Anotherです。

[編集]スペースを無視するには:

(?<=)(?!\s+)[^#]+?(?=#)

末尾のスペースを無視する場合:

(?<=)(?!\s+)[^#]+?(?=\s*#)
于 2011-06-17T02:57:14.033 に答える
1

これを試して。最初と最後のグループはキャプチャされるべきではなく、。*?怠惰なはず

(?:#)(.*?)(?:#)

これがあなたが本当に必要としているものだと思います:

((#[^#]+#)|([^#]*[^#\s]+[^#]*))

#しかし、それは周りのをキャプチャしませんMain String

于 2011-06-17T03:01:29.680 に答える