You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何查找字符串中两个特殊字符间的多段内容并计数?

解决Python提取多段括号内内容的问题

嗨,别担心,初学者遇到这种问题太正常啦!让我帮你拆解一下问题所在,再给出可行的解决方案~

你的问题回顾

你想要提取字符串中(和)之间的所有内容,同时统计这些内容的实例数量。你写的代码如下:

import re 
count=0 
myString="abcde(fghi)defggdfsidf(ijkl)gfders(gkjh)hgstfvd" 
startString = '(' 
endString = ')' 
for item in myString: 
    portString=myString[myString.find(startString)+len(startString):myString.find(endString)] 
    print(portString) 
    count=count+1 

你期望的输出是:

fghi ijkl gkjh

但实际每次循环都只输出fghi,而且循环次数还不对,对吧?

问题出在哪?

你的代码有两个核心问题:

  1. 查找位置固定:myString.find(startString)和myString.find(endString)每次都是从字符串最开头开始查找匹配的字符,所以不管循环多少次,拿到的永远是第一对括号里的内容。
  2. 循环逻辑错误:你遍历的是myString的每个字符,这完全没必要——循环次数会等于字符串的总长度,最后count的数值也会远远大于实际的实例数量。

解决方案

这里给你两种常用的解决方法,按需选择:

方法一:用正则表达式(最简洁高效)

正则表达式可以一次性匹配所有符合(...)格式的内容,直接提取括号内的部分,非常适合这种场景:

import re

myString = "abcde(fghi)defggdfsidf(ijkl)gfders(gkjh)hgstfvd"
# 匹配(和)之间的内容,非贪婪模式避免匹配到最后一个)
matches = re.findall(r'\((.*?)\)', myString)
count = len(matches)

# 输出结果
print(' '.join(matches))
print(f"实例数量:{count}")

代码解释:

  • r'\((.*?)\)':\(和\)是转义后的括号(因为括号在正则里有特殊语法含义);(.*?)是非贪婪匹配,意思是匹配任意字符直到遇到第一个)为止,确保每一对括号的内容都被单独提取。
  • re.findall()会返回所有匹配到的内容组成的列表,列表的长度就是你要统计的实例数量。

方法二:手动遍历(不用正则的实现)

如果你想手动实现这个逻辑,可以通过记录每次查找的起始位置,避免重复匹配开头的括号:

myString = "abcde(fghi)defggdfsidf(ijkl)gfders(gkjh)hgstfvd"
start_char = '('
end_char = ')'
count = 0
results = []

current_pos = 0
while True:
    # 从当前位置开始找下一个(
    start_idx = myString.find(start_char, current_pos)
    if start_idx == -1:
        break  # 找不到更多(,退出循环
    # 从(的下一个位置找对应的)
    end_idx = myString.find(end_char, start_idx + 1)
    if end_idx == -1:
        break  # 找不到匹配的),退出循环
    # 提取括号内的内容
    content = myString[start_idx + 1 : end_idx]
    results.append(content)
    count += 1
    # 更新起始位置为当前)的下一个字符,下次从这里开始查找
    current_pos = end_idx + 1

print(' '.join(results))
print(f"实例数量:{count}")

代码解释:

  • 通过current_pos变量记录每次查找的起始位置,每找到一对括号后,就把current_pos更新为)的下一个字符,这样下次查找就会从下一段内容开始,不会重复匹配第一对括号。
  • 用while True循环直到找不到更多的(或对应的)为止,确保所有符合条件的内容都被提取。

内容的提问来源于stack exchange,提问作者H.K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:47:09