关于正则的贪婪和非贪婪 麻烦大神帮忙看一下
import re# 定义一个字符串
text = 'abcdwabcdf'
# 定义贪婪模式的正则表达式
pattern_greedy = r'a.*f'
result_greedy = re.findall(pattern_greedy, text)
# 定义非贪婪模式的正则表达式
pattern_non_greedy = r'a.*?f'
result_non_greedy = re.findall(pattern_non_greedy, text)
print('贪婪模式匹配结果:', result_greedy)
print('非贪婪模式匹配结果:', result_non_greedy)
我想匹配的是“abcdf”但是2个匹配到的结果都是一样的 贪婪模式匹配结果: ['abcdwabcdf']
非贪婪模式匹配结果: ['abcdf']
在贪婪模式中,正则表达式 r'a.*f' 会尽可能多地匹配任意字符 .* ,直到找到最后一个字符 f 为止。因此,它匹配到了整个字符串'abcdwabcdf'。
而在非贪婪模式中,正则表达式 r'a.*?f' 中的 *? 表示非贪婪匹配,会尽可能少地匹配任意字符,直到找到第一个字符 f 为止。因此,它只匹配到了'abcdf'这个子串。
因此,你可以看到贪婪模式和非贪婪模式在匹配结果上的差异。 在您提供的代码中,贪婪模式的正则表达式 r'a.*f' 和非贪婪模式的正则表达式 r'a.*?f' 都会匹配到相同的结果,这是因为在您的字符串中,有两个 'a' 和一个 'f',因此无论使用哪种模式都会匹配整个字符串。
要匹配您期望的结果“abcdf”,可以采用下述方式进行修改:
import re
text = 'abcdwabcdf'
# 使用非贪婪模式的正则表达式
pattern_non_greedy = r'a.*?f'
result_non_greedy = re.findall(pattern_non_greedy, text)
print('非贪婪模式匹配结果:', result_non_greedy)
这样就能得到您所需的结果。
希望这次回答对您有所帮助。如有其他问题,欢迎继续提问。 isdkz 发表于 2023-11-13 11:32
贪婪模式匹配结果: ['abcdwabcdf']
非贪婪模式匹配结果: ['abcdf']
我想匹配的是 ['abcdf']
非贪婪匹配的也是 ['abcdwabcdf']
{:10_266:} Mike_python小 发表于 2023-11-13 11:32
在您提供的代码中,贪婪模式的正则表达式 r'a.*f' 和非贪婪模式的正则表达式 r'a.*?f' 都会匹配到相同的结 ...
pattern_non_greedy = r'a.*?f'
匹配到的也是 ['abcdwabcdf']
{:10_266:}是哪里错了吗
页:
[1]