我正在为 Vim 插件 UltiSnips 编写一个片段,它将触发正则表达式模式(由 Python 3 支持)。为了避免冲突,我想确保我的代码片段仅在包含在 $$___$$ 中的某个位置时触发。请注意,触发模式可能在其前面或后面包含一个不确定的字符串。例如,我可能想匹配“$$ccbbabbcc$$”中的所有“a”,但不匹配“ccbbabbcc”。显然,如果我可以简单地在后面使用不确定的查看,这将是微不足道的。唉,我可能不会,因为这不是 .NET,而普通 Python 不会允许它。有没有实现这种表达的标准方法?请注意,我将无法使用任何 python 函数。表达式必须是自包含触发器。
问问题
101 次
3 回答
1
如果您要查找的内容仅在“$$”之间出现一次,则:
\$\$.*?(a)(?=.*?\$\$)
这允许您匹配a
以下示例中的所有 3 个字符:
\$\$)
匹配“$$”.*?
非贪婪地匹配 0 个或多个字符(?=.*?\$\$)
字符串必须后跟 0 个或多个任意字符,后跟 '$$'
编码:
import re
s = "$$ccbbabbcc$$xxax$$bcaxay$$"
print(re.findall(r'\$\$.*?(a)(?=.*?\$\$)', s))
印刷:
['a', 'a', 'a']
于 2020-08-13T15:17:17.857 回答
0
以下应该有效:
re.findall("\${2}.+\${2}", stuff)
分解:
寻找两个'$'
"\${2}
然后寻找一个或多个任意字符
.+
然后再次寻找两个'$'
于 2020-08-13T14:39:57.660 回答
0
a
我相信这个正则表达式可以匹配$$
:
text = '$$ccbbabbcc$$ccbbabbcc'
re.findall('\${2}.*(a).*\${2}', text)
# prints
['a']
或者:
一种简单的方法(需要两次检查而不是一个正则表达式)是首先查找引用文本中包含的所有部分,然后检查您的搜索字符串是否存在。
例子
text = '$$ccbbabbcc$$ccbbabbcc'
search_string = 'a'
parts = re.findall('\${2}.+\${2}', text)
[p for p in parts if search_string in p]
# prints
['$$ccbbabbcc$$']
于 2020-08-13T14:51:37.807 回答