我有一個像這樣的字段的字符串:id =「ID-120-1,ID-141-5,ID-92-5,N/A」重複命名捕獲組
我想只將「ID」捕獲到一個指定的捕獲組(即沒有「N/A」或其他可能蠕變的項目)。我認爲這可能工作,但沒有運氣:
\bid=\"(?<id>(ID-\d+-\d+)+)
任何想法?
我有一個像這樣的字段的字符串:id =「ID-120-1,ID-141-5,ID-92-5,N/A」重複命名捕獲組
我想只將「ID」捕獲到一個指定的捕獲組(即沒有「N/A」或其他可能蠕變的項目)。我認爲這可能工作,但沒有運氣:
\bid=\"(?<id>(ID-\d+-\d+)+)
任何想法?
您正在使用的表達式只返回一個在每個ID值前面。以下調整應該解決這個問題。
(?:(?:=\")|(?:,\s))(?<id>(?:ID-\d+-\d+)*)
另一種選擇是隻刪除ID =「檢查部分一起
(?<id>(?:ID-\d+-\d+))
或者你也可以添加」,「上查詢到ID的末尾,以確保您的在
(?<id>(?:ID-\d+-\d+))(?:(?:,\s)|(?:"))
你會需要捕獲逗號和空格也,因爲它們是在你的字符串重複:因爲你的ID開始計數在場
\bid=\"(?<id>(ID-\d+-\d+,)+)
屬性,我相信你正在嘗試做的是不可能用純的正則表達式,特別是如果ID和「N/A」可以混合在一起。你需要有一個循環在你的程序,或如果你使用Perl或PHP,你可以在正則表達式的替換部分(/e
開關)中運行代碼以將匹配添加到數組。
太棒了!非常感謝答案和解釋! – 2010-12-13 00:38:11