我有这两个字符串
2014_UMW
2014_UMW_web
我需要写一个正则表达式来获得第一个下划线之前和之后的角色。然后我需要确保它们都是一样的。我正在检查以确保2014_UMW位于两个字符串的开头。 2014_UMW只是一个例子。它可以是2015_YYY
和2015_YYY_web
等。
这是正在使用(?<=_)[^_]+(?=_)
的正则表达式,然后我使用模式和匹配器方法来查看它们是否相同,但它不能正常工作。我也试过这个正则表达式[a-zA-Z_0-9]+[^_]+(?=_)
。
答案 0 :(得分:0)
要在第一个_
之后获取该部分,您可以使用此正则表达式:
Pattern p = Pattern.compile("^[^_]+_([^_]+)");
并使用matcher.group(1)
为您感兴趣的部分获取被捕获的组#1。
答案 1 :(得分:0)
您说您正在使用的模式(?<=_)[^_]+(?=_)
匹配除'_'
以外的非空字符序列,每个字符由下划线限定。这与你在[第一个]下划线之前和之后获得角色的意图完全不同。
从您的示例中,我认为您要做的是将字符串拆分为下划线,并比较每个字符串的前两个段。在这种情况下,您可以考虑使用String.split()
。细节可能会有所不同,具体取决于您想要如何表征拆分,但这可能是一种简单的方式:
String[] parts1 = string1.split("_");
String[] parts2 = string2.split("_");
// compare elements of parts1 and parts2
或者,如果你想使用正则表达式捕获这样一个字符串的前两个部分,那么你需要Pattern
这些行:
Pattern p = Pattern.compile("^([^_]+)_([^_]+)(?:_.*)?");
(该表单适用于Matcher.matches()
,Matcher.find()
或Matcher.lookingAt()
中的任何一种;如果您只想支持后两种中的一种或两种,则可以使用更简单的表单。 )同样,所需模式的细节可能会根据您所追求的内容而有所不同。