Skip to main content
 首页 » 编程设计

python之如何根据条件python查找字符串中字母的位置

2025年05月04日39findumars

我想在字符串中找到满足一定条件的字母的索引。如果字母前的所有括号都完整,我想找到字母g的索引。

这是我的

sen = 'abcd(fgji(l)jkpg((jgsdti))khgy)ghyig(a)gh' 

这是我做的

lst = [(i.end()) for i in re.finditer('g', sen)] 
# lst 
# [7, 16, 20, 29, 32, 36, 40] 
count_open = 0 
count_close = 0 
for i in lst: 
    sent=sen[0:i] 
    for w in sent: 
        if w == '(': 
            count_open += 1 
        if w == ')': 
            count_close += 1     
        if count_open == count_close && count_open != 0: 
            c = i-1 
     break 

它给我的 c 为 39,这是最后一个索引,但是正确答案应该是 35,因为倒数第二个 g 完成之前的括号。

请您参考如下方法:

您可以省去 regex 并简单地使用一个堆栈来跟踪您的 parens 在迭代字符时是否平衡:

In [4]: def find_balanced_gs(sen): 
   ...:     stack = [] 
   ...:     for i, c in enumerate(sen): 
   ...:         if c == "(": 
   ...:             stack.append(c) 
   ...:         elif c == ")": 
   ...:             stack.pop() 
   ...:         elif c == 'g': 
   ...:             if len(stack) == 0: 
   ...:                 yield i 
   ...: 
 
In [5]: list(find_balanced_gs(sen)) 
Out[5]: [31, 35, 39] 

这里使用堆栈是检查平衡 parans 的“经典”方法。我从头开始实现它已经有一段时间了,所以可能有一些我没有考虑过的边缘情况。但这应该是一个好的开始。我制作了一个生成器,但您可以将其设为返回索引列表、第一个此类索引或最后一个此类索引的普通函数。