[英]How can I use regex to search for repeating word in a string in Python?
[英]What regex can I use to match a string that consist of a word and the same word reversed
我必須創建一個正則表達式來匹配字符串,例如: #word##drow#, @PoOl@@lOop@, #set##tes#
。
到目前為止,我的進度是(@|#)([A-Za-z]{3,})(\1)(\1)([A-Za-z]{3,})(\1)
哪個當然沒有做這項工作,但我想知道如何匹配字符串的反轉部分
輸入示例:
@mix#tix3dj#poOl##loOp#wl@@bong&song%4very$long@thong#Part##traP##@@leveL@@Level@##car#rac##tu@pack@@ckap@#rr#sAw##wAs#r#@w1r
有效 output:
Part##traP#, #sAw##wAs#, @leveL@@Level@
符號之間必須是字母 3 或更多。 必須用 @ 或 # 包圍,只能是兩者之一
無法創建確定性有限自動機來匹配您所需的 state。 所以答案是不可能的。
但是如果單詞的字符有一個最大長度,這個問題可以通過多個 DFA 來解決。 假設單詞正好是 3 個字符:
In [1]: import re
In [2]: pattern = r'([#@])(\w)(\w)(\w)\1{2}\4\3\2\1'
In [3]: re.match(pattern, '#set##tes#')
Out[3]: <re.Match object; span=(0, 10), match='#set##tes#'>
我們分別獲取每個字符並檢查輸入字符串中它們的相反順序。 我們可以創建一個模式生成器並檢查它的多個長度:
In [87]: def create_patterns(min_length, max_length):
...: return (
...: "([#@])" + "(\w)"*i + "\\1{2}" +
...: ''.join(f"\\{j}" for j in range(i+1, 0, -1))
...: for i in range(min_length,max_length+1)
...: )
...:
In [5]: any(re.match(pattern, '#seeet##teees#') for pattern in create_patterns(3,6))
Out[5]: True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.