【问题标题】:How to use .matches for string containing .* in between characters in java如何在java中的字符之间使用.matches包含.*的字符串
【发布时间】:2013-12-18 10:47:35
【问题描述】:
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 (.*)

【问题讨论】:

  • “我不想使用正则表达式。” .*之一。
  • 没有它也不起作用。即使我使用 - String str1 = "My hobby is playing \"Tennis\". I am good at it. I love it. String str2 = "My hobby is playing \"Tennis\". I .* am good at it. I .* love it.
  • 在 str2 中尝试将每个 \" 替换为 \\\"
  • @grexter89:这无济于事。引号符号在我熟悉的任何正则表达式风格中都没有特殊含义——当然在 Java 中没有。添加另一个反斜杠不会伤害,但也不会有任何好处。

标签: java regex string-matching


【解决方案1】:

您的正则表达式将匹配“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.

【讨论】:

  • 我无法使链接正常工作....转到regexpal.com 并复制第一个文本框中的正则表达式My hobby is playing "Tennis"\. I (?:\(.*\) )?am good at it\. I (?:\(.*\) )?love it\. 和第二个框中的两个输入字符串。它会匹配
【解决方案2】:

您需要一个可以匹配变化部分的正则表达式。这里的不同部分是带括号的名称。该部分可能在字符串中,也可能不在字符串中。名称,可以是任何英文字母串。所以你想匹配[open-bracket][any string of alphabets][close bracket]。让我们为此构建一个正则表达式。 I am good at itI love it 两个句子的正则表达式是相同的,所以你只需要复制它。现在:

1. 可以有 0 个或 1 个左括号。如果您根本没有提及名称,则为 0,否则为 1。正则表达式是:[(]? 同样对于右括号,您需要[)]?

2.I 之后必须至少有 1 个空格,am 之前必须至少有 1 个空格。为此,我们需要\s+,但我们需要转义\,因此一个或多个空格的正则表达式变为\\s+。同样,I 后一个空格,love 前一个空格。

3. 然后你需要一个正则表达式来匹配英文的名字/单词。那就是[a-zA-Z]*

4. 最后,all 上面的内容可能会或可能不会出现在句子中,因此我们将上面构建的正则表达式括起来,例如 [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

【讨论】:

  • 我明白了。我犯了一个错误。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 2014-11-06
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多