我在括号内有字符串,如下所示:
t1 = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status != TextToSpeech.ERROR) {
t1.setLanguage(Locale.UK);
t1.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
}
@Override
public void onDone(String utteranceId) {
if(utteranceId.equals("finish")){
finish();
}
}
@Override
public void onError(String utteranceId) {
}
});
}
}
});
如果字符串是UUID格式,我想提取字符串。
示例:[space string space]
使用java正则表达式我如何获得[ d6a413f4-059c-11e8-ba89-0ed5f89f718b ]
?
答案 0 :(得分:1)
对于您的示例,您可以使用lookaround来匹配[
和]
之间的内容:
<强>解释强>
(?= \])
积极的观察,断言以前的是[
.*?
匹配任何字符零次或多次非贪婪(?= \])
肯定前瞻以断言接下来是]
例如:
String regex = "(?<=\\[ ).*?(?= \\])";
String string = "[ d6a413f4-059c-11e8-ba89-0ed5f89f718b ]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println(matcher.group(0));
}
答案 1 :(得分:0)
\[ ([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}) ]
如果您知道您的字符串肯定具有正确的格式,那么您可以使用substring来获取UUID
class Main {
public static void main(String... args) {
String s = "[ d6a413f4-059c-11e8-ba89-0ed5f89f718b ]";
System.out.println(s.substring(2, s.length()-2));
}
}
这比使用正则表达式选项更快。
答案 2 :(得分:0)
"\\[ ([a-f0-9]{8}\\-(?:[a-f0-9]{4}\\-){3}[a-f0-9]{12}) \\]"
\\[
- 字符“[
”及其后的空格
[a-f0-9]{8}
- 从“a
”到“f
”以及从“0”到“9”的字符恰好八次(123e5670
部分)
\\-
- “-
”字符
(?:[a-f0-9]{4}\\-){3}
- 您想要出席三次的非捕获组(此非捕获组应包含4个字符,范围从“a
”到“{{ 1}}'或从'f
'到'0
'。在这4个字符后必须有“9
”字符)(-
部分)
a234-b234-c234-
- 从“[a-f0-9]{12}
”到“a
”以及从“f
”到“0
”的字符正好十二次({{1}部分)
9
- 空格和“d23456789012
”字符
搜索字符串以匹配\\]
方法后,您只使用]
方法打印捕获组#1(捕获组#1包含在括号find()
中)
您的UUID位于捕获组1 中。这是一个如何从源字符串中获取UUID的简单示例:
group(1)