java regex:从一个字符串中获取一个可以变化的子字符串

时间:2011-05-17 11:29:42

标签: regex

我有一个像"Bangalore,India=Karnataka"这样的字符串。从这个String我想只提取子串"Bangalore"。在这种情况下,正则表达式可以是 - (.+),.*=.*。但问题是,String有时可能只有"Bangalore"。那么在这种情况下,上面的正则表达式不会起作用。无论字符串是什么,获取子字符串"Bangalore"的正则表达式是什么?

5 个答案:

答案 0 :(得分:2)

试试这个:

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

<强>解释

^               # 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必须与Bangalore,India=KarnatakaBangalore=Karnataka相匹配,但据我所知,它是Bangalore,India=KarnatakaBangalore,所以正则表达式要简单得多:

^([^,]+)

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

答案 1 :(得分:2)

matcher.matches()

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

matcher.find()

答案 2 :(得分:0)

你是不是被迫用一个正则表达式来解决这个问题而没有别的? (愚蠢的面试问题?极不灵活的外部API?)一般来说,不要试图让正则表达式做普通的旧编程结构做得更好。只使用明显的正则表达式,它不匹配,返回整个字符串。

答案 3 :(得分:0)

如果您只想检查字符串中是否包含“班加罗尔”,那么您不需要正则表达式。

的Python:

In [1]: s = 'Bangalorejkdjiefjiojhdu'

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

答案 4 :(得分:0)

试试这个正则表达式,这将在开始时抓取任何字符组,然后是逗号而不是逗号本身。

^ *(?=)