ニーズを満たす最も単純な一致式 (POSIX ERE 準拠) は次のとおりです。
(/[^ \t/<>]*?)ou([^ \t/<>]*?/)
分解すると、これは次のことを意味します。
( # Capture the following into back-reference #1
/ # match a literal '/'
[^ \t<>] # match any character that is not a space, tab, slash, or angle bracket...
*? # ...any number of times (even zero times), being reluctant
) # end capture
ou # match the letters 'ou'
( # Capture the following into back-reference #2
[^ \t/<>] # match any character that is not a space, tab, slash, or angle bracket...
*? # ...any number of times (even zero times), being reluctant
/ # match a literal '/'
) # end capture
次に、置換式を使用します\1au\2
/
文字間にスペース、タブ、山かっこ (<
と>
)、または別のスラッシュ ( ) がある場合、文字間のテキストは無視/
されます。これらの式のいずれにも出現しないことがわかっている他の文字がある場合は、それを文字クラス ([]
グループ)に追加します。
私のエミュレータでは、次のテキストに変わります。
<font size=+2 color=#E66C2C> jocose /dʒə'kous/</font>
= suj vour ver / suwj dduaf.
Either A/B or B/C might happen, but <b>at any time</b> C/D might also occur
...このテキストに:
<font size=+2 color=#E66C2C> jocose /dʒə'kaus/</font>
= suj vour ver / suwj dduaf.
Either A/B or B/C might happen, but <b>at any time</b> C/D might also occur
わからないことは何でも聞いてください!もしよろしければ、以前に使用しようとしていたものの問題点についても説明できます。
編集:
上記の表現は、音声転写セット全体に一致し、一致の特定の部分を使用して他の部分を置き換えて、完全に置き換えます。次の試合の試みは、現在の試合の後に開始されます。
このため、区切られou
た音声表現で複数回発生する可能性がある場合/
、上記の正規表現を複数回実行する必要があります。ワンススルー実行の場合、言語またはツールは、可変長の先読みと後読み (総称してルックアラウンド) の両方をサポートする必要があります。
私の知る限り、これは Microsoft の .Net Regex と、JGSoft の正規表現の "フレーバー" (EditPad Pro や RegexBuddy などのツール) にすぎません。POSIX (UNIX grep が必要) はどのような種類のルックアラウンドもサポートしておらず、Python (私はTextWranglerが使用していると思います) は可変長のルックアラウンドをサポートしていません。可変長ルックアラウンドなしでは不可能だと思います。
可変長ルックアラウンドを必要とし、必要なことを行う式は次のようになります。
(?<=/[^ \t/<>]*?)ou(?=[^ \t/<>]*?/)
...そして、置換される文字のみを一致させる (したがって置換する) ため、置換式も同様に変更する必要があります。
au
のみに一致することを除いて、ほとんど同じように機能しou
、チェック (ゼロ幅アサーションと呼ばれる) を実行して、直前に aと任意の数の特定の文字があり、直後に任意の数の特定の文字が続くことを確認/
します。次に/
。