正则表达式将字符串拆分为两个不同的部分

时间:2016-03-15 20:50:01

标签: java regex

我正在尝试拆分这些字符串:

She Hopes He Loves You - Obscure Admission.aiff
I Hope They Can't Hold Us - Last Tenant.aiff
She Said I Love It - Integrated Employer.aac
She Will Try - Concrete Shell feat. Feminine Trench.aac
I Think They Can't Hold Us Down - Hard Imagination.wav

我试图获得两个不同的正则表达式:

例子是:“她希望他爱你 - 晦涩的入场.aiff”

  • 将在连字符(破折号)之前获取文本的文本,例如我想要检索的第一个正则表达式:

“她希望他爱你”

对于第二个,我想在连字符(破折号)之后得到文本,但不是文件扩展名,例如我想获得的示例字符串:

“模糊入场”

4 个答案:

答案 0 :(得分:2)

无需使用正则表达式,只需使用带有连字符

的拆分
final String entireLine = "She Hopes He Loves You - Obscure Admission.aiff";
final String[] array = entireLine.split(" - ");
for (final String string : array) {
    System.out.println(string);
}

输出:

  

她希望他爱你

     

Obscure Admission.aiff

答案 1 :(得分:0)

如果一个正则表达式都遵循上面的语法,那么这个正则表达式应该是(.*?)\s*-\s*(.*)\.\w+。如果连字符周围没有空格,这也可以工作。

答案 2 :(得分:0)

您可以使用匹配的组。 您的正则表达式如下所示:([a-zA-Z\s]+)-\s([a-zA-Z\s]+)\.[a-zA-Z]+ 然后你必须使用这种结构: while (matcher.find){ System.out.println(matcher.group(2)); }

答案 3 :(得分:0)

无需使用正则表达式(或String.split,也使用正则表达式。)

如果只有一个短划线,如上面的评论中所述:

int dashPos = str.indexOf("-");
int dotPos = str.lastIndexOf(".");

String bitBeforeDash = str.substring(0, dashPos);
String bitAfterDashButBeforeDot = str.substring(dashPos + 1, dotPos);