待匹配文本如下
access_token: 79_yZa1nQvm7YposlGBZE8yyYmmO_dq6Nu6YXpEL-AKrtiMT1V2OEb7UhG4iC4ByJr9bkMSf-30K_SmBeGGWDJ7eqvXbRjGcDduydoSKLcWGsmUl0ejywSd52NymcAEGFhAEANPO:access_token
正则表达式
.?
匹配结果是
79_yZa1nQvm7YposlGBZE8yyYmmO_dq6Nu6YXpEL-AKrtiMT1V2OEb7UhG4iC4ByJr9bkMSf-30K_SmBeGGWDJ7eqvXbRjGcDduydoSKLcWGsmUl0ejywSd52NymcAEGFhAEANPO:access_token
感觉【access_token: 】也符合正则表达式【.?】匹配的范围,不知道为什么匹配不到文本开头的【access_token: 】,但是能匹配到文本结尾的【:access_token】
正则表达式.*?的匹配逻辑
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在正则表达式中,
.
表示匹配任意单个字符(除了换行符),*
表示前面的字符可以重复零次或多次,而?
则是一个可选量词,使得前面的字符尽可能少地匹配。因此,.*?
的含义是匹配尽可能少的任意字符。当你在文本中使用
.*?
时,它会从当前位置开始尝试匹配尽可能少的字符,直到遇到下一个满足模式的部分。在这个例子中,由于没有指定特定的模式来限制匹配的开始位置,所以.*?
将匹配从第一个字符开始直到文本结束的所有字符。这导致了整个字符串被匹配,因为你没有提供一个明确的停止条件来让它在遇到 "access_token:" 之前停下来。如果你想要匹配的是 "access_token:" 后面的内容,并且不包括 "access_token:", 可以使用下面的正则表达式:
access_token:\s*(.*?)\s*:\s*access_token
这里的关键在于使用了圆括号
( )
来创建一个捕获组,这样我们就可以提取出匹配的内容。.*?
在这个上下文中仍然表示尽可能少地匹配任意字符,但这次它是在寻找 "access_token:" 和 ":access_token" 之间的内容。\s*
匹配任意数量的空白字符,以处理可能存在的空格或制表符。下面是使用 Python 中的
re
模块进行匹配的示例代码:import re text = "access_token: 79_yZa1nQvm7YposlGBZE8yyYmmO_dq6Nu6YXpEL-AKrtiMT1V2OEb7UhG4iC4ByJr9bkMSf-30K_SmBeGGWDJ7eqvXbRjGcDduydoSKLcWGsmUl0ejywSd52NymcAEGFhAEANPO:access_token" match = re.search(r'access_token:\s*(.*?)\s*:\s*access_token', text) if match: result = match.group(1) print(result) else: print("No match found")
运行这段代码,你会得到输出:
79_yZa1nQvm7YposlGBZE8yyYmmO_dq6Nu6YXpEL-AKrtiMT1V2OEb7UhG4iC4ByJr9bkMSf-30K_SmBeGGWDJ7eqvXbRjGcDduydoSKLcWGsmUl0ejywSd52NymcAEGFhAEANPO
,这是你想要匹配的部分。解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 三极管电路求解,已知电阻电压和三级关放大倍数
- ¥15 ADS时域 连续相位观察方法
- ¥15 Opencv配置出错
- ¥15 模电中二极管,三极管和电容的应用
- ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
- ¥15 气象网格数据与卫星轨道数据如何匹配
- ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
- ¥15 微软账户问题不小心注销了好像
- ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
- ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused