Python - 正则表达式前瞻
Lookahead在Python正则表达式中用作断言,以确定模式是否在前面,即在解析器当前位置的右侧是成功还是失败。他们不匹配任何东西。因此,它们被称为零宽度断言。
句法:
# Positive lookahead
(?=)
示例 1:
Python3
# importing regex
import re
# lookahead example
example = re.search(r'geeks(?=[a-z])', "geeksforgeeks")
# display output
print("Pattern:", example.group())
print("Pattern found from index:",
example.start(), "to",
example.end())
Python3
# importing regex
import re
# Lookahead example
example = re.search(r'geeks(?=[a-z])',
"geeks123")
# output
print(example)
Python3
# import required module
import re
# using lookahead
example1 = re.search(r'geeks(?=[a-z])',
"geeksforgeeks")
print('Using lookahead:', example1.group())
# without using lookahead
example2 = re.search(r'geeks([a-z])',
"geeksforgeeks")
print('Without using lookahead:', example2.group())
Python3
# import required module
import re
# positive lookahead
example1 = re.search('geeks(?=[a-z])',
'geeksforgeeks')
print('Positive Lookahead:', example1.group())
# negative lookahead
example2 = re.search('geeks(?![a-z])',
'geeks123')
print('Negative Lookahead:', example2.group())
输出:
Pattern: geeks
Pattern found from index: 0 to 5
前瞻断言(?=[az])指定geeks 后面的内容必须是小写字母字符。在这种情况下,它是字符f ,找到匹配项。
示例 2:
蟒蛇3
# importing regex
import re
# Lookahead example
example = re.search(r'geeks(?=[a-z])',
"geeks123")
# output
print(example)
输出:
None
在上面的例子中,输出是 None 因为 geeks 之后的下一个字符是 1。它不是小写字母字符。
超前部分不是搜索字符串的一部分。因此,它被称为零宽度断言。当您不希望输出返回搜索字符串中存在的前瞻部分但希望使用它来匹配特定部分后面的模式时,它们很重要。下面的例子将说明这一点。
示例 3:
蟒蛇3
# import required module
import re
# using lookahead
example1 = re.search(r'geeks(?=[a-z])',
"geeksforgeeks")
print('Using lookahead:', example1.group())
# without using lookahead
example2 = re.search(r'geeks([a-z])',
"geeksforgeeks")
print('Without using lookahead:', example2.group())
输出:
Using lookahead: geeks
Without using lookahead: geeksf
使用前瞻生成的输出是 'geeks' 而不使用前瞻生成的输出是geeksf 。 f被正则表达式消耗,并成为搜索字符串的一部分。
负前瞻与前瞻相反。这是为了确保搜索字符串后面没有
句法:
# Negative Lookahead
(?!)
示例 4:
蟒蛇3
# import required module
import re
# positive lookahead
example1 = re.search('geeks(?=[a-z])',
'geeksforgeeks')
print('Positive Lookahead:', example1.group())
# negative lookahead
example2 = re.search('geeks(?![a-z])',
'geeks123')
print('Negative Lookahead:', example2.group())
输出:
Positive Lookahead: geeks
Negative Lookahead: geeks
在上面的例子中,输出是 geeks 因为这里的搜索字符串geeks后面没有小写字母。