结构化搜索与替换
常规搜索过程不会考虑源代码的语法和语义。 即使使用正则表达式,PyCharm 仍会将您的代码视为普通文本。 通过 结构化搜索与替换 (SSR )操作,您可以在考虑代码结构的情况下,在代码中搜索特定的代码模式或语法结构。
PyCharm 会根据您创建的 搜索模板 以及应用的 条件 查找并替换源代码片段。
按结构搜索目标
在主菜单中,转到 以打开 结构搜索 对话框。
在 结构搜索 对话框中,执行以下操作之一:
从头创建模板:在模板列表中选择 草稿模板 ,并在编辑器区域中输入代码模板(例如,
$variable$表示您的代码)。要将自定义模板保存以供日后使用,请在对话框工具栏上点击 保存模板 图标(
)。 您还可以选择将该模板另存为检查。


PyCharm 会将创建的模板添加到模板列表中的 最近 节点。
使用现有模板之一作为原型:从可用的现有模板列表中选择所需的模板。
请考虑添加到 HTML 文件中的以下样式定义:
<style> #element1 { display: inline-block; width: 25%; margin-top:90px; } #element2 { display: inline-block; width: 40%; margin-top:10px; } </style>让我们查找 HTML 文件中包含在 <div> 标记内的样式元素的所有引用。
在 下选择 HTML 属性值。

点击 查找 ,在整个项目中搜索这些结构。
PyCharm 会在编辑器中立即高亮显示找到的代码匹配项。
结构搜索 对话框会显示所选模板及其筛选器的值。 您可以编辑现有筛选器,或添加新的 条件 ,例如正则表达式或 脚本约束。 将插入符号置于代码变量上,并使用筛选器区域管理其筛选器。

在 修饰符 面板中,点击 添加 (
)以创建新的修饰符。 若要使用正则表达式,请选择 文本。 您还可以根据变量添加 其他修饰符。
在此示例中,设置以下条件:
对于 $tag$ –
text=div对于 $attribute$ –
text=id对于 $value$ –
text=element[1-9]

指定搜索范围:项目、模块、目录或自定义范围。
点击 查找。
PyCharm 会在 查找 工具窗口中显示结果。

按结构替换目标
在主菜单中,转到 。
如果需要为替换模板中的变量添加筛选器,请将插入符号置于感兴趣的变量上,并使用筛选器区域管理其筛选器。

在筛选器区域中,根据您选择的 筛选器 ,指定条件。
要缩小替换结果范围,请选择以下选项:
缩短完全限定名 - 将完全限定类名替换为短名称并添加导入。
重新格式化 - 自动格式化替换后的代码。
使用静态导入 - 在可能的情况下在替换中使用静态导入。
指定必要的选项后,点击 查找。 PyCharm 会在 查找 工具窗口中显示结果。
在 查找 工具窗口中,您可以进一步处理结果,逐个替换找到的项目、一次性全部替换,或预览潜在的更改。
请参考以下示例,将 p 标记中 class 属性的大写值转换为小写。 在 搜索模板 字段中,我们创建一个模板,用于搜索 class 属性中具有大写值([A-Z].* 和 区分大小写 )的所有 p 标记。 我们将搜索范围仅限定为这两个 class 值(搜索目标 = b)。 在 替换模板 字段中,我们创建一个新变量 $d$ ,并为其分配一个 Groovy 脚本(b.getText().toLowerCase())。 搜索完成后,我们选择 全部替换 执行替换。
共享搜索模板
您可以通过导出或导入与同事共享搜索模板。
在 结构搜索 对话框( )中, 创建新的搜索模板或使用现有模板。
要导出模板,请点击
。 PyCharm 会将该模板的 XML 表示添加到剪贴板(按 Ctrl+Shift+V 查看剪贴板内容)。 您可以在聊天、电子邮件或论坛中将此表示与其他开发者共享。
要导入模板,请从任意位置(电子邮件、聊天或论坛)复制(Ctrl+C )共享的 XML 代码,并在 结构搜索 对话框中点击
。 PyCharm 会获取该 XML 代码表示,并将其转换为模板,其中包含变量和范围(如果存在)。