Python中如何用正則運算式,獲取一個字串中第一個重復的英文字母
已有的方案是:
根據re模塊里面的正則運算式物件的search方法可以指定開始和截止位置的特性,設計每找到一個結果就往前一個單位,再對比所有找到的結果其中last index最小的那一組就是答案。
就還是很麻煩,求簡便直接一點的解法

------------------------------代碼-----------------------------------
# 方案二:
# 找出所有的重復組,采用span()[1]最小的那一組
import re,sys
pa = re.compile(r"(?i)([a-zA-Z]).*\1")
# 利用正則運算式物件可以可以額外指定開始和截至位置的特性
# 每找到一個結果再往前前進一個單位
start = 0
result = pa.search(random_str, start)
result_list = []
# 如果沒有結果直接列印(-1,-1)
if result is None:
print("無重復的字母")
sys.exit(0)
while result:
start = result.pos + 1
# 如果有重復的結果,就直接continue
if len(result_list) > 0 and result.span()[0] == result_list[len(result_list) - 1][0] and result.span()[1] == \
result_list[len(result_list) - 1][1]:
result = pa.search(random_str, start)
continue
result_list.append(result)
result = pa.search(random_str, start)
# 比較最后一個字符的位置,找出最小的那一個
earliest_index = 0
lowest_value = result_list[0].span()[1]
for i in range(1, len(result_list)):
if result_list[i].span()[1] < lowest_value:
lowest_value = result_list[i].span()[1]
earliest_index = i
print("第一個重復的英文字母為:", result_list[earliest_index].group()[0])
uj5u.com熱心網友回復:
需要正則??for i in a:
if i in b:
print(i)
else:
b.append(i)
uj5u.com熱心網友回復:
但如果用正則運算式怎么寫呢,如果但是回圈遍歷就很簡單嘛,這個題目是要用正則運算式.....uj5u.com熱心網友回復:
沒有匹配目標和匹配規則,只能以操作字串形式來完成任務uj5u.com熱心網友回復:
這樣不行嗎?re.findall(r"([a-zA-Z])\1",str)
uj5u.com熱心網友回復:
這樣會出現一個中間串無法獲取,例如“acca”,他是獲取不到c這一組的,它是能夠查詢到一段的結果后,這中間的內容就過了,就會忽略很多情況uj5u.com熱心網友回復:
你要實作什么, 舉例子說明,如果人家回答完了,你又來個特例,那就不辦法解決了。
import re
x = 'acca'
re.findall(r"([a-zA-Z])\1",x)
['c']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/112285.html
上一篇:rosdep update出錯ERROR: error loading sources list: <urlopen error <urlopen error
