我是一名Java開發人員,也是Python的新手。我想定義一個正則表達式接受所有的字母字符,除了其中的一些。我想排除元音和字符'y',無論是大寫還是小寫。Python版本的Java正則表達式?
Java中的正則表達式這將是如下:
"[a-zA-Z&&[^aeiouyAEIOUY]]"
如何我(重新)將其定義爲在Python?上述對Python顯然不起作用。而且我也不像下面的方式進行提示:
"[bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ]"
我是一名Java開發人員,也是Python的新手。我想定義一個正則表達式接受所有的字母字符,除了其中的一些。我想排除元音和字符'y',無論是大寫還是小寫。Python版本的Java正則表達式?
Java中的正則表達式這將是如下:
"[a-zA-Z&&[^aeiouyAEIOUY]]"
如何我(重新)將其定義爲在Python?上述對Python顯然不起作用。而且我也不像下面的方式進行提示:
"[bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ]"
我不認爲目前的蟒蛇正則表達式模塊有你在尋找什麼。最終的替代regex
確實有你所需要的,你可以根據自己的意願安裝它。
除此之外,否定可能是一條路。基本上,定義你不想要的所有字符,然後反轉。聽起來很傷感,但「非字」速記(\W
)可以幫助我們。 \w
表示a-zA-Z0-9_
(用於ASCII匹配),而\W
表示相反()。因此,[aeiouyAEIOUY\W\d_]
意味着你不想找的每個角色,所以[^aeiouyAEIOUY\W\d_]
意味着你正在尋找的每個角色。例如。
>>> import re
>>> s = "xyz_ d10 word"
>>> pattern = "[^aeiouyAEIOUY\W\d_]+"
>>> re.findall(pattern, s)
['x', 'z', 'd', 'w', 'rd']
如果您嚴格按照ASCII字符,那麼您可以使用ASCII
標誌。例如。
>>> s = "Español"
>>> re.findall(pattern, s)
['sp', 'ñ', 'l']
>>> re.findall(pattern, s, re.ASCII)
['sp', 'l']
像(?i)[b-df-hj-np-tv-xz]
或(?i)\w(?<![_aeiouy\d])
。測試here。
(?= ...)積極的前瞻斷言。如果包含的 正則表達式(此處用...表示)成功匹配當前位置的 ,則會成功,否則將失敗。但是,一旦試用了包含的 表達式,匹配引擎根本沒有進展; 模式的其餘部分在斷言開始的地方被嘗試。
(?!...)否定性超前斷言。這與 積極主張相反;如果包含的表達式不是 匹配字符串中的當前位置,它會成功。
r"(?![aeiouyAEIOUY])[a-zA-Z])"
我發現這種方法在嘗試匹配多個字符時遇到了問題。試試:'re.findall(r「((?![aeiouyAEIOUY])[a-zA-Z])+」,「string」)'。我期望'['str','ng']',但它會產生'['r','g']'。 – Dunes
@Dunes使用非捕獲的'(?:..)'而不是'(...)'。整行:'re.findall(r「(?:(?![aeiouyAEIOUY])[a-zA-Z])+」,「string」)'。試試簡單的'[bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ]',你會得到相同的結果。 '['r','g']'結果是正確的,但這個評論可能太短而無法解釋。仔細閱讀文檔。這是兩個匹配的組。基本上第一場比賽是's'然後't'然後'r',第二場比賽是'n'然後'g'。新的比賽覆蓋舊的比賽。 – VPfB
您是否嘗試從您的Java代碼中刪除'&&'? –