重复捕获分隔字符串中的子字符串
Repeatedly capture a sub-string within a delimited string
假设我们有一个字符串:
some random text $$ hello world $$ some more stuff
在由 $$
分隔的字符串中,我想捕获所有出现的 o
(例如,为了在 Sublime Text 3 中查找和替换)。
如何制定这样的正则表达式命令?即使我计划在 Sublime Text 中使用这个正则表达式命令,我也可以使用一个使用不同符号的正则表达式命令并修复它以便在 ST3 中使用。
使用正则表达式:
($$[^o]*)o(.*?$$)
替换为:
其中 5
是替换字符串。
测试here.
如果你想搜索一个子字符串而不是一个字符,你可以使用:
($$.*?)lo(.*?$$)
使用相同的替换字符串。
测试here.
另一种选择是首先提取定界符 ($$ hello world $$
) 之间的子字符串,然后在结果上执行您需要的任何搜索和替换操作。这可能还需要循环,直到不再进行任何替换。
就我对正则表达式的了解,您需要使用两个正则表达式来替换分隔符之间的 all o。第一个是实际抓取分隔符内的文本。例如:
(?P<start>$$) # start by grabbing the starting literal '$$'
(?<middle>.*?)(?=$$) # then grab everything up until the ending '$$'
(?P<end>$$) # now grab the ending '$$'
示例:https://regex101.com/r/015Xj8/4
显然您知道开始和结束是什么,因此您可以根据需要进一步简化它(例如,没有开始或结束组),但为了完整起见,我将其包括在内。
一旦你捕获了它的 start/end,你可以用文字 'o' 上的直接 find/replace 替换 o
。据我所知,通过正则表达式需要两个步骤才能完成您想要的操作。我对 sublime 不太了解,但也许它有一个类似 sed 的替换功能。
以下将替换字符串中的第一个 o
(类似于 virolino 的其他答案),但您需要多次单击 "Enter" 以确保所有最后的 o 被替换为有用的:
(?P<start>$$)
(?<middle>.*?(?<first_o>o).*?)(?=$$)
(?P<end>$$)
或者,如果您只是想捕捉 O(而不是其他),您可以确保它位于开始和结束之间 $$
:
$$.*?(o).*?$$
假设我们有一个字符串:
some random text $$ hello world $$ some more stuff
在由 $$
分隔的字符串中,我想捕获所有出现的 o
(例如,为了在 Sublime Text 3 中查找和替换)。
如何制定这样的正则表达式命令?即使我计划在 Sublime Text 中使用这个正则表达式命令,我也可以使用一个使用不同符号的正则表达式命令并修复它以便在 ST3 中使用。
使用正则表达式:
($$[^o]*)o(.*?$$)
替换为:
其中 5
是替换字符串。
测试here.
如果你想搜索一个子字符串而不是一个字符,你可以使用:
($$.*?)lo(.*?$$)
使用相同的替换字符串。
测试here.
另一种选择是首先提取定界符 ($$ hello world $$
) 之间的子字符串,然后在结果上执行您需要的任何搜索和替换操作。这可能还需要循环,直到不再进行任何替换。
就我对正则表达式的了解,您需要使用两个正则表达式来替换分隔符之间的 all o。第一个是实际抓取分隔符内的文本。例如:
(?P<start>$$) # start by grabbing the starting literal '$$'
(?<middle>.*?)(?=$$) # then grab everything up until the ending '$$'
(?P<end>$$) # now grab the ending '$$'
示例:https://regex101.com/r/015Xj8/4
显然您知道开始和结束是什么,因此您可以根据需要进一步简化它(例如,没有开始或结束组),但为了完整起见,我将其包括在内。
一旦你捕获了它的 start/end,你可以用文字 'o' 上的直接 find/replace 替换 o
。据我所知,通过正则表达式需要两个步骤才能完成您想要的操作。我对 sublime 不太了解,但也许它有一个类似 sed 的替换功能。
以下将替换字符串中的第一个 o
(类似于 virolino 的其他答案),但您需要多次单击 "Enter" 以确保所有最后的 o 被替换为有用的:
(?P<start>$$)
(?<middle>.*?(?<first_o>o).*?)(?=$$)
(?P<end>$$)
或者,如果您只是想捕捉 O(而不是其他),您可以确保它位于开始和结束之间 $$
:
$$.*?(o).*?$$