[英]Python regex: how to check if a character in a string is within the span of a regex matched substring?
我有一個正則表達式模式,我在一大段文本(單個字符串)上使用。 原始文本的幾個不連續區域與正則表達式匹配。 現在,我正在嘗試構建一個狀態機,迭代文本並根據某個位置的char執行不同的操作,以及此位置是否在正則表達式匹配的范圍內。
使用RE.finditer(文本),我可以找到所有子字符串,並提取它們的跨度,因此我有一個元組列表可以使用例如
(1,5)(10,15)(20,55)等
有了這些信息,給定我的字符串中的字符索引,我可以編寫一個算法來查看該字符是否是正則表達式字符串的一部分。 例如,給定字符6,我可以瀏覽跨度列表並確定它不是匹配子字符串的一部分。
有沒有更好的方法呢?
提前致謝,
JW
編輯:聽起來你想編寫自己的解析器FSM(除其他外)標記逗號字符,只有當它們沒有被轉義時。 以下正則表達式適用於標識符,可能包含轉義的逗號。 你可以用antlr / lex:
input = r'aaaaa,bbbb/,ccccc,dddddd,'
pat = re.compile(r'((\w+|/,)+)')
for mat in re.finditer(pat, input):
... do stuff with mat.group(0)
(原始答案:這可能是一個很好的解決方案,但你沒有給我們足夠的背景知識。
字符是出現一次還是多次出現? 如果它出現一次,你可以檢查string.find(char)
的索引是否位於正則表達式匹配的范圍內。
字符是任意字符 - 給我們一個具體的例子嗎? 你為什么要按字符進行此操作? 大概你沒有按順序檢查多個字符?
你想要的結果是boolean( '是的,char是在一些正則表達式匹配的范圍內找到的' )? 以及你在找到char的情況下做了什么?在正則表達式匹配之外?
編輯這里是一個正則表達式,它將抓取文本,
忽略轉義,
:
(?=<,)(?:[^,]|(?=</),)(?=,)
原始答案這是一些偽python代碼,應該做你正在尋找的:
pattern = re.compile(...)
pos = 0
while (match = pattern.search(haystack, pos)) {
for (i in range(pos, match.start)
//These chars are outside the match.
for (i in group(0))
//The chars are in the match
pos = match.end
//Finish with the rest of the chars not matched
for (i in range(pos, len(haystack))
//These chars are outside the match.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.