regex - 需要在两个分隔符之间生成正则表达式
问题描述
我需要找到一个可以给我两个分隔符之间的字符串的正则表达式(在这种情况下为@)
我以前用过这个 (?<=@)(.*?)(?=@)
但是这个问题是
我没有选择两个令牌,而是从这条线上获得三个令牌
UPDATE XYZ
SET EVENTTIME='21:01', DEADLINE='21:21',
COMPONENTNAME = '@token1@_some_update',checkthgis= '@token2@' WHERE TYPE='STATIC_UPDATE'
- 令牌1
- _some_update',checkthgis=
- 令牌 2
我为此使用这个 Ansible 代码
- name: Find the tokens (@----@) in the fileString
set_fact:
tokens: "{{ fileString | regex_findall(regexp)}}"
vars:
regexp: '(?<=\@)(.*?)(?=\@)'
- name: Replace the token in the configuration files
replace:
path: "{{file}}"
regexp: "@{{token}}@"
replace: "{{ lookup('ini', '{{token}} type=properties file=/root/xyz/myfile.properties default=@{{token}}@')}}"
with_items: "{{tokens}}"
loop_control:
loop_var: token
理想情况下,这应该只给我
令牌 1 和令牌 2
解决方案
如果您使用(?<=@).*?(?=@)
该模式,将尽可能少地匹配字符串中每对之间的任何 0+ 字符@
,并且一旦匹配,它将继续在找到前一个匹配项的位置和它的右侧查找匹配项。由于(?=@)
是前瞻,零宽度断言,正则表达式可能会开始匹配@
刚刚成为结束分隔符的 。
您可以使用
(?<=@)([^\s@]+)(?=@)
查看正则表达式演示
它匹配:
(?<=@)
- 紧接在前面的位置@
([^\s@]+)
- 第 1 组:除空格之外的任何 1+ 个字符和@
(?=@)
- 紧随其后的位置@
推荐阅读
- c++ - 使用 basic_string 声明一种新的字符串类型
- python - 在数据框中应用功能缓慢
- c# - asp.net C# - 无法从 sql 数据库中填充(预选)下拉列表 SelectedValue
- java - 应用程序安装失败 安装失败并显示消息 Failed to finalize session : INSTALL_PARSE FAILED MANIFEST MALFORMED
- c++ - 如何在 C++ OpenCV 中使用 OutputArrayOfArrays
- go - Golang模板函数返回空白页
- visual-studio-code - VS Code 中的“在文件中搜索”
- javascript - 如何使最小高度为 300 像素的 ng-bootstrap 轮播响应?
- scala - scala spark数据框爆炸很慢-因此,替代方法-从列中的数组创建列和行
- c - 如何调试 Lua 扩展随机段错误