繁体   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