假设我们要从文件中提取以 1
开头并以 aa>>>
结尾的所有字符串。
所以我们将使用这个正则表达式:
1(.*)+a{2}>>>$
此正则表达式将返回包含 aa>>>
的所有值
例如,在 32 123.123.bmp aa>>>
上测试正则表达式,它将返回 123.123.bmp aaa>>>
有什么方法可以从结果中排除 aa>>>
吗?
对于上面的示例,我想要 123.123.bmp
作为结果。
最佳答案
您可以使用
1.*?(?=\s*a{2}>>>$)
请参阅regex demo
详细信息
-
1
-1
字符 -
.*?
- 任意 0 个以上字符,尽可能少 -
(?=\s*a{2}>>>$)
- 正向 lokahead(非消耗模式,不会将匹配的文本添加到整个匹配(组 0)值),需要(紧邻当前位置的右侧):-
\s*
- 0+ 空格 -
a{2}
- 两个a
s -
>>>$
->>>
在字符串的末尾。
-
仅当 1
时才匹配前面没有其他数字,请使用 (?<!\d)
向后看:
(?<!\d)1.*?(?=\s*a{2}>>>$)
或单词边界:
\b1.*?(?=\s*a{2}>>>$)
关于没有特殊字符的正则表达式结果(排除一些字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56068436/