[英]fail to extract value using regex
我有一個strig,看起來像: "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
它不起作用,在正則表達式中非常弱的人會喜歡一些幫助:)
謝謝!
您可以使用該正則表達式:
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:並將值添加到第一個; 在一組
您可以將正則表達式更新為
這不會在第一個捕獲組([^;]+)
捕獲分號
然后使用您的代碼,它看起來像:
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
如果要獲得第一個匹配項(因為字符串中始終有一個匹配項),則使用findFirstIn
更為有意義:
"""(?<=PersonId:)[^;]+""".r.findFirstIn(str).get
(?<=PersonId:)[^;]+
正則表達式表示:
(?<=PersonId:)
-斷言在當前位置的左側緊鄰有PersonId:
文本 [^;]+
- 1+比其它字符;
參見regex演示 。
參見Scala演示 :
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
塊與未錨定的正則表達式match
使用(此處,您可以不受限制地匹配PersonId:
和ID本身之間的可選空格):
val personIdRegex = """PersonId:\s*([^;]+)""".r.unanchored
val personIdExtracted = str match {
case personIdRegex(person_id) => person_id
case _ => ""
}
請參閱此Scala演示 。
在這里, .unanchored
使模式匹配字符串中的部分子字符串,而正則表達式中的([^;]+)
構成了一個捕獲組,該捕獲組可以由match
塊內的任意名稱引用(我選擇person_id
)。
如果要從“ bla bla bla PersonId:fruhdHH $ skdjJIFROfUB3djeggG $ tt; bla bla bla”捕獲fruhdHH $ skdjJIFROfUB3djeggG $ tt 。
您可以使用以下模式: “。* PersonId:(。*);” 這將在組1中捕獲所需的值。
可以按以下方式剖析此模式:
。* PersonId::這是要匹配任何模式匹配的“ PersonId:”
(。*); :用來捕獲第一組中的任何系列字符,直到一個; 遇到
您可以使用以下內容。
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));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.