我有一个像"Bangalore,India=Karnataka"
这样的字符串。从这个String我想只提取子串"Bangalore"
。在这种情况下,正则表达式可以是 - (.+),.*=.*
。但问题是,String有时可能只有"Bangalore"
。那么在这种情况下,上面的正则表达式不会起作用。无论字符串是什么,获取子字符串"Bangalore"
的正则表达式是什么?
答案 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=Karnataka
或Bangalore=Karnataka
相匹配,但据我所知,它是Bangalore,India=Karnataka
或Bangalore
,所以正则表达式要简单得多:
^([^,]+)
这将在字符串的开头匹配一个或多个非逗号字符,并在第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)
试试这个正则表达式,这将在开始时抓取任何字符组,然后是逗号而不是逗号本身。
^ *(?=)