簡體   English   中英

如何在java中的字符之間使用包含。*的字符串.matches

[英]How to use .matches for string containing .* in between characters in java

String str1 = "My hobby is playing \"Tennis\" I am good at it. I love it."
String str2 = "My hobby is playing \"Tennis\". I (Alex) am good at it. I(Alex) love it. "

我想檢查str1是否與除Alex部分之外的str2匹配。

注意 - 亞歷克斯是一個變化的部分。 可能是湯姆,哈里等。

所以我試過: -

str2 = "My hobby is playing \"Tennis\". I (.*) am good at it. I(.*) love it. "
str1.matches(str2)

但它返回false。

我在這做錯了什么?

它適用於: -

str2 = "My hobby is playing \"Tennis\". I (.*)

你的正則表達式將匹配“I”和“am”之間的兩個空格,因此它不匹配字符串

"My hobby is playing \"Tennis\" I am good at it. I love it."

因為那里只有一個空白。 而且,你在“網球”之后錯過了點。 但是,要注意“。” 在正則表達式中有特殊含義。 所以你想在你的正則表達式中逃脫點

嘗試:

"My hobby is playing \"Tennis\"\\. I (?:\\(.*\\) )?am good at it\\. I (?:\\(.*\\) )?love it\\."

以上將匹配兩者:

My hobby is playing "Tennis". I am good at it. I love it.
My hobby is playing "Tennis". I (Alex) am good at it. I (Alex) love it.

你需要一個可以匹配不同部分的正則表達式。 這里的變化部分是帶括號的名稱。 該部分可能在字符串中,也可能不存在。 名稱,可以是任何英文字母字符串。 所以你想匹配[open-bracket][any string of alphabets][close bracket] 讓我們為此構建一個正則表達式。 兩個句子的正則表達式I am good at it並且I love it是相同的,所以你只需要復制它。 現在:

1.可以有0或1個開放式支架。 如果你根本沒有提到名字,則為0,否則為1。 正則表達式是這樣的: [(]?類似的關閉括號,你需要[)]?

2.必須有后至少1個空格I和前一個am 為此,我們需要\\s+ ,但我們需要轉義\\ ,因此一個或多個空格的正則表達式成為\\\\s+ 同樣,在Ilove之前的一個空間。

3.然后,你需要一個正則表達式匹配的英語名稱/詞。 那只是[a-zA-Z]*

4.最后,上述所有內容可能也可能不在句子中,因此我們將上面構建的正則表達式包含在內,就像這個[regex-built-above]* 這確保了帶括號的名稱也可以不存在。

5.您需要逃脫. \\

最后, str2應該是:

String str2 = "My hobby is playing \\"Tennis\\"\\\\. I[\\\\s+[(]?[a-zA-Z]*[)]?\\\\s+]* am good at it\\\\. I[\\\\s+[(]?[a-zA-Z]*[)]?\\\\s+]* love it\\\\."

它將匹配以下任何str1

str1 = "My hobby is playing \\"Tennis\\". I (Alex) am good at it. I (Alex) love it."

str1 = "My hobby is playing \\"Tennis\\". I am good at it. I love it."

如果有幫助,請告訴我。 它對我有用..

有用的資源:

1. http://www.tutorialspoint.com/java/java_regular_expressions.htm

2. http://www.tutorialspoint.com/java/java_string_matches.htm

暫無
暫無

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

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