作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试编写一个正则表达式来匹配可能包含或不包含两个标记的字符串。我需要表达式返回字符串的所有五个元素,具体取决于它们是否存在,但是当我将标记设为可选时,通配符位似乎吞噬了它们:
输入可以是:
text{a}more{b}words
{a}text{b}test
text
text{b}text
text{b}
text{a}text
等等。唯一可以保证的是 <a>
永远在 <b>
之前,前提是它们存在。
现在我的表情如下所示:
^(.*?)(\{a\})?(.*?)(\{b\})?(.*?)$
不幸的是,这最终会将所有文本都扔到最后一组,无论标签是否存在。有没有办法让它们变得贪婪,同时又让它们保持可选? re.findall
不幸的是,似乎也没有帮助。
任何帮助将不胜感激! :)
最佳答案
尝试以下正则表达式:^(.*(?={a})|.*?)({a})?(.*(?={b})|.*)({b })?(.*?)$
import re
inputs = ['{a}text{b}test', 'text', 'text{b}text', 'text{b}', 'text{a}text']
p = re.compile(r"^(.*(?={a})|.*?)({a})?(.*(?={b})|.*)({b})?(.*?)$")
for input in inputs:
print p.match(input).groups()
输出:
('', '{a}', 'text', '{b}', 'test')
('', None, 'text', None, '')
('', None, 'text', '{b}', 'text')
('', None, 'text', '{b}', '')
('text', '{a}', 'text', None, '')
关于带有可选但贪婪组的 Python 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5095437/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!