簡體   English   中英

我可以使用什么正則表達式來匹配由一個單詞和相同單詞組成的字符串反轉

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM