簡體   English   中英

java regex從較大的字符串中排除特定的字符串

[英]java regex to exclude specific strings from a larger one

一段時間以來,我一直在反對這個問題:我想捕獲所有[az]+[0-9]? 不包括字符串的字符序列,例如sin|cos|tan等。因此,完成我的正則表達式作業時,以下正則表達式應該有效:

(?:(?!(sin|cos|tan)))\b[a-z]+[0-9]?

正如你看到我使用負前瞻與交替沿-在\\b后的非捕獲組右括號關鍵是要避免匹配insin等正則表達式有意義,因為事實上我與使用RegexBuddy試了一下和Java作為目標實現並獲得想要的結果,但它不能使用Java Matcher和Pattern對象! 有什么想法嗎?

干杯

\\b在錯誤的地方。 它要尋找那些沒有正弦/余弦/棕褐色一個字邊界。 但是在其中任何一個邊界之后的邊界最后會有一個字母,所以它必須是一個字結束邊界,如果下一個字符是az,則不能這樣。

此外,否定前瞻(如果有效)將排除字符串,如cost ,如果您只是過濾掉關鍵字,我不確定您是否需要。

我建議:

\b(?!sin\b|cos\b|tan\b)[a-z]+[0-9]?\b

或者,更簡單地說,您可以匹配\\b[az]+[0-9]?\\b然后過濾掉關鍵字列表中的字符串。 您並不總是必須在正則表達式中執行所有操作。

所以你想要[az]+[0-9]? (一個至少一個字母的序列,可選地后面跟一個數字), 除非那個字母序列類似於sin cos tan

\b(?!(sin|cos|tan)(?=\d|\b))[a-z]+\d?\b

結果:

cos   - no match
cosy  - full match
cos1  - no match
cosy1 - full match
bla9  - full match
bla99 - no match

我忘了逃避\\b for java so \\b應該是\\\\b ,它現在可以工作了。 干杯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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