import re
str_ = "(x)abc ()def (x)ghi"
print re.findall("\(x\)(.*?)(?=\(\)|$|\(x\))", str_)
# >>> ['abc ', 'ghi']
# 匹配所有勾选过的内容。直到下一个括号或者空括号或者行尾。
1. (pattern) 匹配pattern并获取这一匹配。
2. (?:pattern) 非获取匹配:匹配pattern但不获取匹配结果,不进行存储供以后使用。
3. (?=pattern) 正向肯定预查,非获取匹配,在任何匹配pattern的字符串开始处匹配查找字符串。
4. (?!pattern) 正向否定预查,非获取匹配,在任何不匹配pattern的字符串开始处匹配查找字符串。
例如:
456(?=abc|def|123) 可以匹配456123或者456abc,但不能匹配456321。
456(?!abc|def|123) 可以匹配456321但不能匹配456123。
5. (?<=pattern) 反向肯定预查,非获取匹配,与正向肯定预查类拟,只是方向相反。
6. (?<!pattern) 反向否定预查,非获取匹配,与正向否定预查类拟,只是方向相反。
例如:
(?<=abc|def|123)456 可以匹配123456或者abc456,但不能匹配321456。
(?<!abc|def|123)456 可以匹配321456但不能匹配123456。