regex - 带有 3 个正则表达式替换的崇高文本片段替换
问题描述
我正在尝试制作一个片段,该片段将根据一个变量(路由器接口名称)的输入来做 3 件事。我已经使正则表达式正常工作,但它是单独工作的。
remove xx- >>>>> IS-${310/\w{2}-//g}-BUSINESS
replace / with _ >>>>> IS-${310/\//_/g}-BUSINESS
ae make it capital >>>>> IS-${310/(ae)/\U$1/g}-BUSINESS
所以如果我进入一个普通的路由器界面,比如ge-1/2/21
结果应该是 > IS-1_2_21-BUSINESS
但是如果我进入像ae31这样的界面
它应该使它成为资本>>>> IS-AE31-BUSINESS
解决方案
您的问题不包括您希望最终代码段的外观,所以这里有一个简单的代码段示例,它将所有这三个操作合并为一个,您可以根据需要进行调整。
<snippet>
<content><![CDATA[
# ${310}
IS-${310/(ae)|(?:(\w{2}-))|(?:(\/))/(?1\U$1:)(?2:)(?3:_)/g}-BUSINESS
]]></content>
<tabTrigger>test</tabTrigger>
</snippet>
整体结构为${variable/regex/format_string/options}
。正则表达式使用Boost 库正则表达式,格式字符串使用Boost 库格式字符串(有关更多信息,请参阅非官方文档中的片段页面)。
Boost 格式字符串支持 形式的条件替换(?Ntrue:false)
,其中对于捕获组,如果匹配捕获了任何内容或没有捕获任何内容N
,则替换是文本。true
false
在这里,正则表达式中的每个可能的变化都被捕获(或不被捕获),并且替换指定匹配的组应该扩展到什么。请注意,在执行此类操作时,您可能需要注意不同可能匹配之间的相互作用。
推荐阅读
- javascript - 为什么 src=".../firebase-app.js" 不起作用?
- powerbi - 如何在 PowerBi 上的可视化中创建一条目标线
- c# - 当 # 提供而不是时,如何在 C# 中拆分查询字符串?
- c++ - 在终端中运行 c++ 程序时,有什么方法可以通过名称传递参数
- python - 如何向 pyqt 5 gui 添加滚动条?
- python - 我可以在模板字符串中使用切片吗?
- rest - REST 中的文件上传应该是他们自己的资源吗?
- bash - 如何在另一个控制台中从另一个脚本运行 bash 脚本?
- jquery - 如果字符串已知,则获取包含在标识符中的整个字符串
- scala - 如何制作函数来进行映射