Regex java正则表达式:从可以变化的字符串中获取子字符串

Regex java正则表达式:从可以变化的字符串中获取子字符串,regex,Regex,我有一个字符串,比如-“印度班加罗尔=卡纳塔克邦”。从这个字符串中,我只想提取子字符串“Bangalore”。在这种情况下,正则表达式可以是-(.+),.*=.*。但问题是,字符串有时可能只像“Bangalore”。那么在这种情况下,上面的正则表达式就不起作用了。无论字符串是什么,获取子字符串“Bangalore”的正则表达式是什么 您是否被迫使用一个regexp而不使用其他任何东西来解决这个问题?(愚蠢的面试问题?极其死板的外部API?)一般来说,不要试图让正则表达式做普通的老编程结构做得更好

我有一个字符串,比如-
“印度班加罗尔=卡纳塔克邦”
。从这个字符串中,我只想提取子字符串
“Bangalore”
。在这种情况下,正则表达式可以是-
(.+),.*=.*
。但问题是,字符串有时可能只像
“Bangalore”
。那么在这种情况下,上面的正则表达式就不起作用了。无论字符串是什么,获取子字符串“Bangalore”的正则表达式是什么

您是否被迫使用一个regexp而不使用其他任何东西来解决这个问题?(愚蠢的面试问题?极其死板的外部API?)一般来说,不要试图让正则表达式做普通的老编程结构做得更好的事情。只需使用明显的正则表达式,如果它不匹配,则返回整个字符串

您是否被迫使用一个regexp而不使用其他任何东西来解决这个问题?(愚蠢的面试问题?极其死板的外部API?)一般来说,不要试图让正则表达式做普通的老编程结构做得更好的事情。只需使用明显的正则表达式,如果它不匹配,则返回整个字符串

如果您只想检查字符串中是否包含“Bangalore”,则不需要使用regexp

Python:

In [1]: s = 'Bangalorejkdjiefjiojhdu'

In [2]: 'Bangalore' in s
Out[2]: True

如果您只想检查字符串中是否包含“Bangalore”,那么不需要使用regexp

Python:

In [1]: s = 'Bangalorejkdjiefjiojhdu'

In [2]: 'Bangalore' in s
Out[2]: True

试试这个正则表达式,它将获取任何一组字符的开头,后面跟一个逗号,而不是逗号本身


^.*(=,)

试试这个正则表达式,它将获取开头的任何字符分组,后跟逗号,而不是逗号本身

^.*(=,)

试试这个:

^(.+?)(?:,.*?)?=.*$
说明:

^               # Begining of the string
  (             # begining of capture group 1
    .+?         # one or more any char non-greedy
  )             # end of group 1
  (?:           # beginig of NON capture group
    ,           # a comma
    .*?         # 0 or more any char non-greedy
  )?            # end of non capture group, optional
  =             # equal sign
  .*            # 0 or more any char
$               # end of string
已更新: 我认为OP必须匹配
班加罗尔,印度=卡纳塔克邦
班加罗尔=卡纳塔克邦
,但据我所知
班加罗尔,印度=卡纳塔克邦
班加罗尔
因此正则表达式更简单:

^([^,]+)
这将在字符串的开头匹配一个或多个非逗号字符,并在组1中捕获它们。

请尝试以下方法:

^(.+?)(?:,.*?)?=.*$
matcher.matches()
说明:

^               # Begining of the string
  (             # begining of capture group 1
    .+?         # one or more any char non-greedy
  )             # end of group 1
  (?:           # beginig of NON capture group
    ,           # a comma
    .*?         # 0 or more any char non-greedy
  )?            # end of non capture group, optional
  =             # equal sign
  .*            # 0 or more any char
$               # end of string
已更新: 我认为OP必须匹配
班加罗尔,印度=卡纳塔克邦
班加罗尔=卡纳塔克邦
,但据我所知
班加罗尔,印度=卡纳塔克邦
班加罗尔
因此正则表达式更简单:

^([^,]+)
这将在字符串的开头匹配一个或多个非逗号字符,并在组1中捕获它们

matcher.matches()
尝试匹配整个输入字符串。查看java.util.regex.Matcher的javadoc。您需要使用:

matcher.find()
尝试匹配整个输入字符串。查看java.util.regex.Matcher的javadoc。您需要使用:

matcher.find()


“Athlone”是“班加罗尔,印度=卡纳塔克邦”的一个子串吗?对不起,应该是“班加罗尔”。打印错误在您知道如何编写正则表达式之前,您必须知道所有可能的字符串格式。你能在这里正式列出它们吗?以什么方式“Athlone”是“班加罗尔,印度=卡纳塔克邦”的一个子串?对不起,应该是“班加罗尔”。打印错误在您知道如何编写正则表达式之前,您必须知道所有可能的字符串格式。你能在这里正式列出它们吗?嗯,这是OP要求的;-)当字符串为“班加罗尔,印度=卡纳塔克邦”时,这一功能正常,但当字符串仅为“班加罗尔”@titorks时,这一功能不起作用:我误解了你的问题。看看我最新的答案。嗯,这就是OP要求的;-)当字符串为“班加罗尔,印度=卡纳塔克邦”时,这一功能正常,但当字符串仅为“班加罗尔”@titorks时,这一功能不起作用:我误解了你的问题。请参阅我的更新答案。当字符串为“Bangalore,India=Karnataka”时,该选项可以正常工作,但当字符串仅为“Bangalore”时,该选项不起作用。所以让我直截了当地说,您想要一个正则表达式,它匹配同一表达式中的任何字符和特定字符组?!对于同一个表达式,您想要的逻辑上是不可能的。不,我始终希望正则表达式与“Bangalore”匹配,但输入字符串可以是“Bangalore,India=Karnataka”或仅是“Bangalore”。当字符串为“Bangalore,India=Karnataka”时,这可以正常工作,但当字符串仅为“Bangalore”时,则不工作让我说清楚,你想要一个正则表达式,它匹配任何字符和同一表达式中的特定字符组?!对于同一个表达式,您在逻辑上所需的是不可能的。不,我始终希望正则表达式与“Bangalore”匹配,但输入字符串可以是“Bangalore,India=Karnataka”,也可以是“Bangalore”。我需要将此信息提供给Java代码,这必须使用regexpexplain完成,您需要提供字符串“Bangalore”,当使用正则表达式从标准编程结构中提取时,该字符串有何不同?我需要向Java代码提供此信息,而这必须使用正则表达式来完成,您需要提供字符串“Bangalore”,当使用正则表达式从标准编程结构中提取字符串时,字符串有什么不同?是的,实际上我必须将此信息发送到Java代码,该代码将与它已有的信息相匹配,我被迫使用正则表达式:(是的,实际上我必须将此信息发送到一个Java代码,该代码将与它已经拥有的信息相匹配,并且我被迫使用regex执行此操作:(