我有一个看起来像"bla bla bla PersonId:fruhdHH$skdjJIFROfUB3djeggG$tt; bla bla bla"
我想提取PersonId,所以基本上我需要PersonId:
和;
之间的所有内容,我做了类似的事情:
val personIdRegex: Regex = """PersonId:\+s;""".r
val personIdExtracted = personIdRegex.findAllIn(str).matchData.take(1).map(m => m.group(1)).mkString
它没有工作的想法,在正则表达式中相当弱,会喜欢一些帮助:)
谢谢!
答案 0 :(得分:5)
您可以使用该正则表达式:
String test="bla bla bla PersonId:fruhdHH$skdjJIFROfUB3djeggG$tt; bla bla bla";
Pattern p = Pattern.compile("PersonId:([^;]+)");
Matcher m = p.matcher(test);
if (m.find()) {
System.out.println(m.group(1));
}
搜索PersonId:并将值添加到第一个;在一个小组
答案 1 :(得分:4)
您可以将正则表达式更新为
这将不会捕获第一个捕获组([^;]+)
然后使用你的代码看起来像:
val personIdRegex: Regex = """PersonId:([^;]+)""".r
val str = "bla bla bla PersonId:fruhdHH$skdjJIFROfUB3djeggG$tt; bla bla bla"
val personIdExtracted = personIdRegex.findAllIn(str).matchData.take(1).map(m => m.group(1)).mkString
println(personIdExtracted)
那会给你:
fruhdHH$skdjJIFROfUB3djeggG$tt
答案 2 :(得分:2)
如果你想得到第一个匹配(因为字符串中总会有一个匹配),使用findFirstIn
更有意义:
"""(?<=PersonId:)[^;]+""".r.findFirstIn(str).get
(?<=PersonId:)[^;]+
正则表达式意味着:
(?<=PersonId:)
- 断言当前位置左侧有PersonId:
个文字[^;]+
- 除;
以外的1个字符请参阅regex demo。
请参阅Scala demo:
val str = "bla bla bla PersonId:fruhdHH$skdjJIFROfUB3djeggG$tt; bla bla bla"
val personIdRegex = """(?<=PersonId:)[^;]+""".r
val personIdExtracted = personIdRegex.findFirstIn(str).get
println(personIdExtracted)
// => fruhdHH$skdjJIFROfUB3djeggG$tt
或者,更自然的方式,使用match
块与未锚定的正则表达式(在这里,您可以匹配PersonId:
和ID本身之间的可选空格而不受限制):
val personIdRegex = """PersonId:\s*([^;]+)""".r.unanchored
val personIdExtracted = str match {
case personIdRegex(person_id) => person_id
case _ => ""
}
请参阅this Scala demo。
这里,.unanchored
使模式匹配字符串内的部分子串,正则表达式中的([^;]+)
形成一个捕获组,可以通过match
块内的任意名称引用(我选择person_id
)。
答案 3 :(得分:0)
如果你想捕捉 的 fruhdHH $ $ skdjJIFROfUB3djeggG TT 强> 来自&#34; bla bla bla PersonId:fruhdHH $ skdjJIFROfUB3djeggG $ tt; bla bla bla&#34; 。
您可以使用此模式:&#34;。* PersonId:(。*);&#34; 这将捕获组1中的所需值。
这种模式可以通过以下方式解决:
。* PersonId::这是为了匹配任何模式,以及#34; PersonId:&#34;
(。*); :这是为了捕获第一组中的任何一系列字符,直到a;遇到了
答案 4 :(得分:0)
您可以使用以下内容。
String str = "bla bla bla PersonId:fruhdHH$skdjJIFROfUB3djeggG$tt; bla bla bla";
Pattern pattern = Pattern.compile("PersonId:(.*?);");
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
System.out.println(matcher.group(1));
}