求助:Python正则表达式匹配>与<之间内容的有效方法
解决Python正则提取>和<之间内容的问题
我懂你想要用Python正则表达式提取字符串中位于>和<之间的内容,之前尝试的re.findall('^>.*<$', string)和re.findall('^\>.*\<$', string)没达到预期效果对吧?咱们先来分析问题出在哪,再给出可行的正则方案。
为什么之前的写法不生效?
你的正则里用到了^和$,这两个符号分别匹配字符串的开头和字符串的结尾。也就是说,只有当整个字符串完全符合>内容<这种格式(开头是>,结尾是<)时,才能匹配成功。如果你的字符串前后有其他内容,或者包含多组>...<片段,这种写法就完全匹配不到了。
可行的正则解决方案
方案1:匹配非换行的内容(最常用)
用捕获组匹配>之后、<之前的所有非<字符,写法如下:
import re string = "示例文本>需要提取的内容1<,还有>需要提取的内容2<" result = re.findall(r'>([^<]+)<', string) print(result) # 输出: ['需要提取的内容1', '需要提取的内容2']
>:匹配起始的分隔符([^<]+):捕获组,[^<]表示匹配除了<之外的任意字符,+表示匹配1次或多次,这样能精准截取到<之前的内容<:匹配结束的分隔符
方案2:匹配包含换行的内容
如果>和<之间的内容可能包含换行符(.默认不匹配换行),可以用[\s\S]匹配所有字符(包括换行),再结合非贪婪匹配:
import re string = "多行内容>第一行\n第二行<,继续测试>第三行<" result = re.findall(r'>([\s\S]+?)<', string) print(result) # 输出: ['第一行\n第二行', '第三行']
[\s\S]:匹配任意空白字符和非空白字符,也就是所有字符+?:非贪婪匹配,避免把多个>...<片段的内容合并成一个结果
补充:如果只匹配单个>...<且字符串就是该格式
如果你确实只需要匹配整个字符串就是>内容<的情况,那可以给正则加上捕获组来提取内容:
import re string = ">单个内容<" result = re.findall(r'^>(.*)<$', string) print(result) # 输出: ['单个内容']
试试这些方案,应该能满足你的需求啦!
内容的提问来源于stack exchange,提问作者Kyle K
相关产品推荐
相关产品推荐

