我想用这样的拼音转换斜线替换一个拼音符号:
/anycharacter*ou*anycharacter/
到
/anycharacter*au*anycharacter/
我的意思是我想在所有情况下用任何两个拼音斜线之间的“au”替换“ou”。例如:
<font size=+2 color=#E66C2C> jocose /dʒə'kous/</font>
= suj vour ver / suwj dduaf
到
<font size=+2 color=#E66C2C> jocose /dʒə'kaus/</font>
= suj vour ver / suwj dduaf
到目前为止,我一直在使用:
Find: \/(.*?)\bou*\b(.*?)\/\s
Replace: /\1au\2\3\4/
但它找到任何/.../之间的所有字符串,包括正常的正斜杠和HTLM斜杠,并且当替换它时会绕过诸如/ gou /,/ tou /等项目。与上面的示例一样,输出为:
<font size=+2 color=#E66C2C> jocose /dʒə'kaus/</font>
= suj vaur ver / suwj dduaf
注意:正常斜线之前的“vour”被“vaur”取代不是我的目的。
您能指导我如何解决上述问题吗?非常感谢。
答案 0 :(得分:7)
可能满足您需求的最简单匹配表达式(符合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和正则表达式的JGSoft“风格”(在EditPad Pro和RegexBuddy等工具中)。 POSIX(UNIX grep需要)不支持任何类型的环视和Python(我 THINK TextWrangler使用)不支持可变长度环视。我相信没有可变长度的环顾四周就不可能。
需要可变长度环视的表达式,并且您需要的内容可能是这样的:
(?<=/[^ \t/<>]*?)ou(?=[^ \t/<>]*?/)
...并且还需要修改替换表达式,因为您只匹配(并因此替换)要替换的字符:
au
它的工作原理大致相同,只是它只与ou
匹配,然后运行检查(称为零宽度断言)到确保它后面紧跟{ {1}}和任意数量的某些字符,然后紧跟任意数量的某些字符,然后是/
。