Python中关于正则表达式的问题

如果有一个字符串 a=‘ bbbbaab ’ 我想要同时正则出‘ bb ’和‘ baab ’,应该怎么实现?


Python中关于正则表达式的问题
8 回复

虽然理论上 baab|bb 可以实现

不过我刚刚做了个小测试,发现会匹配两个 bb,baab 没有被匹配

如果你的 bb 一定是位于头部的,可以用

baab|^bb


正则表达式是Python里处理字符串匹配的利器,核心就是re模块。最常用的几个函数:

re.search():扫描整个字符串,返回第一个匹配对象,没找到就返回None

import re
text = "我的电话是138-1234-5678,另一个是139-8765-4321"
match = re.search(r'\d{3}-\d{4}-\d{4}', text)
if match:
    print(f"找到电话: {match.group()}")  # 输出: 找到电话: 138-1234-5678

re.findall():返回字符串中所有匹配的子串列表。

phones = re.findall(r'\d{3}-\d{4}-\d{4}', text)
print(phones)  # 输出: ['138-1234-5678', '139-8765-4321']

re.sub():替换匹配的文本。

new_text = re.sub(r'\d{3}-\d{4}-\d{4}', '***-****-****', text)
print(new_text)  # 输出: 我的电话是***-****-****,另一个是***-****-****

re.compile():预编译正则表达式,提升重复使用时的效率。

pattern = re.compile(r'\d{3}-\d{4}-\d{4}')
result = pattern.findall(text)

写正则表达式时,记得用原始字符串(前面加r),比如r'\d',这样反斜杠就不会被Python字符串转义干扰。匹配对象(match)的group()方法能取出匹配到的具体文本,start()end()能拿到位置。

正则表达式语法里,.匹配任意字符(换行符除外),\d匹配数字,\w匹配单词字符,*+用于重复匹配,[]定义字符集,()用来分组。

总结:先想清楚要匹配什么模式,再选合适的re函数。

baab|bb(?!aab)
如果你想优先匹配 baab 的话:baab|(?<!baa)bb(?!aab)

~~ 你这是想怎么匹配 ,bb 出现在字符串里的多个位置

(bb?)(baab)
用 search 才行

b(aa)?b(?!aab)

b = re.match(’(bb).*(baab)’, a)
b.group(1)
b.group(2)

感谢各位大神给的思路

回到顶部