我有这个svg
<circle id="a/b/c" stroke="#2C2C2C" stroke-width="2" fill="#FFF" fill-rule="nonzero" cx="141" cy="21" r="9"/><text id="a/b/c-something" font-size="10" fill="#2C2C2C"><tspan x="0" y="10">a/b/c Something</tspan></text>
我想替换id="a/b/c"
to id="a-b-c"
in thecircle
和id="a/b/c-something"
to id="a-b-c-something"
intext
并排除a/b/c Something
被替换。
我正在使用 vscode,并且我已经尝试过(id=.+)\/(.+)
,但它似乎无法正确匹配它。我想要
一个通用的方法是匹配并捕获第一个符合条件的/
char之前的部分,匹配这个char而不捕获,然后匹配右边的部分以确保上下文正确,然后替换为Group 1 value + new char + 第 2 组值。
一般方案是
Find: (left-hand context)text to remove/replace(right-hand context)
Replace: $1new_text$2
然后重复,直到不再对文档进行更改。
在您的情况下,您可以使用
查找内容: (\sid="[^"/]*)/([^"]*"[^>]*>)
替换为:$1-$2
请参阅正则表达式演示。详情:
(
- 第一组:
\s
- 一个空格id="
- 固定文本[^"]*
- 零个或多个字符以外的"
字符)
- 第 1 组结束/
- 一个/
字符(
- 第 2 组:
[^"]*
- 零个或多个字符"
"
- 一个"
字符[^>]*
- 零个或多个字符>
>
- 一个>
字符)
- 第 2 组结束。这适用于文件搜索和替换以及文档内搜索和替换功能。
如果您使用文档内搜索和替换功能对单个文档应用正则表达式,则可以使用基于环视的模式一次性实现目标:
查找内容: (?<=\sid="[^"]*)/(?=[^"]*"[^>]*>)
替换为:-
请参阅此正则表达式演示。详情:
(?<=\sid="[^"]*)
- 与紧接在其前面的位置相匹配的正向回溯
\s
- 一个空格id="
- 固定文本[^"]*
- 零个或多个字符以外的"
字符/
- 一个/
字符(?=[^"]*"[^>]*>)
- 与紧随其后的位置匹配的正向超前
[^"]*
- 零个或多个字符"
"
- 一个"
字符[^>]*
- 零个或多个字符>
>
- 一个>
字符。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句