Простейшее выражение соответствия, которое может удовлетворить ваши потребности (совместимо с 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
может встречаться более одного раза в фонетическом выражении, разделенном /
, указанное выше регулярное выражение необходимо будет запустить несколько раз. Для однократного выполнения язык или инструмент должны поддерживать как переменную длину упреждающий, так и упреждающий просмотр (совместно просмотр вокруг)
Насколько я знаю, это только .Net Regex от Microsoft и «аромат» регулярного выражения JGSoft (в таких инструментах, как EditPad Pro и RegexBuddy). POSIX (который требуется UNIX grep) не поддерживает какой-либо просмотр, а Python (который, как я ДУМАЮ использует TextWrangler) не поддерживает просмотр переменной длины. Я считаю, что это было бы невозможно без просмотра переменной длины.
Выражение, которое требует просмотра переменной длины и делает то, что вам нужно, может выглядеть так:
(?<=/[^ \t/<>]*?)ou(?=[^ \t/<>]*?/)
... и выражение замены также необходимо будет изменить, поскольку вы сопоставляете (и, следовательно, заменяете) только символы, которые должны быть заменены:
au
Он работает почти так же, за исключением того, что он соответствует только ou
, а затем запускает проверку (называемую утверждением нулевой ширины), чтобы убедиться, что ему непосредственно предшествует /
и любое количество определенных символов, и сразу за ним следует любое количество определенных символов, а затем /
.
person
Code Jockey
schedule
04.11.2011