gpt4 book ai didi

regex - 如何替换 TextWrangler 中两个分隔符之间的项目

转载 作者:行者123 更新时间:2023-12-02 07:44:27 24 4
gpt4 key购买 nike

我想像这样替换注音斜线之间的注音符号:

/anycharacter*ou*anycharacter/

/anycharacter*au*anycharacter/

我的意思是我想在所有情况下将任何两个拼音斜杠之间的“ou”替换为“au”。例如:

<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
  • 文本文件包含 HTML 代码和一些文本正斜杠(例如 A/B 而不是 A 或 B)
  • 字符串“anycharacter”可以是任何字符,一个或多个或没有字符。例如:/folou/,/houl/,/sou/,/dʒə'kousnis/...

到目前为止,我一直在使用:

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”不是我的目的。

能否请您指导我如何解决上述问题?非常感谢。

最佳答案

可能满足您的需求(符合 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(我认为 TextWrangler 使用)不支持可变长度环视。我相信如果没有可变长度环视是不可能的。

需要可变长度环视并执行所需操作的表达式可能是这样的:

(?<=/[^ \t/<>]*?)ou(?=[^ \t/<>]*?/)

...并且替换表达式也需要修改,因为您只匹配(并因此替换)要替换的字符:

au

除了它只匹配 ou 之外,它的工作原理大致相同。 ,然后运行检查(称为零宽度断言)以确保它紧接在 / 之前和任意数量的特定字符,紧跟任意数量的特定字符,然后是 / .

关于regex - 如何替换 TextWrangler 中两个分隔符之间的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8009467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com