我有一個包含類似以下一組屬性的字符串:任何正則表達式從字符串中提取屬性?
"T=Junior Developer, DNQ=13346057, SURNAME=Doe, GIVENNAME=John, SERIALNUMBER=UK"
是否有可以在Java中被用來收集各個屬性(比如姓)正則表達式?
感謝
我有一個包含類似以下一組屬性的字符串:任何正則表達式從字符串中提取屬性?
"T=Junior Developer, DNQ=13346057, SURNAME=Doe, GIVENNAME=John, SERIALNUMBER=UK"
是否有可以在Java中被用來收集各個屬性(比如姓)正則表達式?
感謝
SURNAME=[^,]+
您可以使用this.Or更安全,你還可以使用
SURNAME=.*?(?=,\s)
即使你在你的姓有,
第二個會工作。
這個小例子展示瞭如何訪問示例字符串中的屬性名稱及其值。這適用於字符串中的所有屬性和值。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Test {
public static void main(String[] args) {
String s = "T=Junior Developer, DNQ=13346057, SURNAME=Doe, GIVENNAME=John, SERIALNUMBER=UK";
Matcher m = Pattern.compile("(?:,)?([^=]+)\\=([^,]+)").matcher(s);
while (m.find()) {
System.out.println(m.group(1) + " - " + m.group(2));
}
}
}
說明正則表達式的:
(?:,)?([^=]+)\\=([^,]+)
(?:,)?
是一個非捕獲組可以,但不是必須發生。它通過屬性值對之間的逗號和空格來匹配分隔符。([^=]+)
是一個匹配一個或多個字符的組,直到出現=
。\\=
與=
相符。這是一個特殊的角色,因此必須逃脫。([^,]+)
匹配一個或多個字符直到下一個,
,當下一個propery將開始。謝謝!你的例子也工作。無論如何,我選擇了第一個答覆,只是按時間分配 – user2824073 2014-10-20 11:28:44
這看起來像CSV。來源是什麼? – nhahtdh 2014-10-20 10:54:10
請務必記住,正則表達式用於獲取/匹配字符串中的字符串序列。所以瞭解姓氏的格式非常重要。 SURNAME = [^,] +可以是一個很好的解決方案,但如果姓氏可以包含逗號字符,則不起作用...因此,在嘗試用正則表達式匹配之前,您必須準確定義所有可能姓氏的格式 – 2014-10-20 11:03:01