3

これは次のものに多少関連しています:正規表現 - ブロック内のテキストの書式設定 - IMですが、別の問題です。

-次の条件で のラッピング テキストを探しています:

条件:

  • トークンは行頭または行末にすることができます
  • トークンは、スペースまたは 1 つ以上の記号 ({.,!@#$....}) で囲む必要があります。
    • -問題のペアを囲む通常の文字 [a-zA-Z] であってはなりません。
    • サンプル テスト 3 を参照してください ...w-thank you-
    • -が [^a-zA-Z] でラップされているため、テスト 4 と 5 は成功します。
  • -トークンの最初のスペースまたは最後のトークンの前にスペースを続けてはいけません-
    • -"-Wow -" は、終了の前にスペースがあるため、一致しません。
    • サンプル テスト 6 および 7 を参照してください。

私が必要とする正規表現の前に:(^|[\s\W]+)
そして最後は次のようになります:($|[\s\W]+)

私は現在の式を持っていますが、最初の式を見つけた後にエスケープ条件が停止しているため失敗しています-

   (^|[\s\W]+)-([^\s][^-]*)-($|[\s\W]+)

サンプル テスト文字列は次のようになります。

  1. (全て。):-Wow-thank you-.
  2. (わお):-Wow- thank you-!
  3. (なし):- Wow-thank you-.
  4. (ありがとうございました):- Wow!-thank you-
  5. (ありがとうございました):- Wow -thank you-
  6. (全て):-Wow - thank you-
  7. (なし):-Wow - thank you -

これは後ろを見る必要がありますか?(私は正規表現の初心者なので、ご容赦ください)または、私の中間条件が完全に間違っています。

どうもありがとう!
ムウルフ。

4

1 に答える 1

1

より単純な中間式を試してください。

(^|[\s\W]+)-(.*?)-($|[\s\W]+)
             ^^^

貪欲でないワイルドカード マッチでは、次の-($|[\s\W]+).


編集。わかりました、なぜそれが間違っているのかわかりました。スペース以外の文字を開始ダッシュと終了ダッシュの直後に続けて、それぞれ成功させたいとします。だからこれを試してください:

(^|[\s\W]+)-(\S.*?\S)-($|[\s\W]+)
             ^^   ^^
于 2013-03-08T07:11:03.473 に答える