我想將“My String 2022-01-07”之類的字串提取日期部分到命名捕獲中。
我嘗試了以下正則運算式,但它僅在完全匹配時才有效:
# Does not work
iex> Regex.named_captures(~r/(?<date>\$?(\d{4}-\d{2}-\d{2})?)/, "My String 2021-01-01")
%{"date" => ""}
# Works
iex> Regex.named_captures(~r/(?<date>\$?(\d{4}-\d{2}-\d{2})?)/, "2021-01-01")
%{"date" => "2021-01-01"}
我也試過這個沒有運氣:
iex> Regex.named_captures(~r/([a-zA-Z0-9 ] ?)(?<date>\$?(\d{4}-\d{2}-\d{2})?)/, "My String 2021-01-01")
%{"date" => ""}
當您不關心日期周圍的字符時,有沒有辦法使用命名捕獲來提取字串的日期部分?
我想我正在尋找一個像這樣作業的正則運算式:
iex> Regex.named_captures(REGEX???, "My String 2021-01-01 Other Parts")
%{"date" => "2021-01-01"}
uj5u.com熱心網友回復:
你要
Regex.named_captures(~r/(?<date>\$?\d{4}-\d{2}-\d{2})/, "My String 2021-01-01")
您的正則運算式 - (?<date>\$?(\d{4}-\d{2}-\d{2})?)- 代表一個命名的捕獲組,date其名稱和\$?(\d{4}-\d{2}-\d{2})?模式是 a。該\$?(\d{4}-\d{2}-\d{2})?模式匹配
\$?- 一個可選$字符(\d{4}-\d{2}-\d{2})?-四位數字的可選序列,-,兩位數字,-,兩位數字。
由于圖案未錨定(不必整個字串匹配)和兩個連續的圖案部分是可選的,因而可以匹配一個空字串,則~r/(?<date>\$?(\d{4}-\d{2}-\d{2})?)/正則運算式**在開始匹配的第一個空位置(空字串)"My String 2021-01-01"字串.
經驗法則:如果您不想匹配空字串,請確保您的模式包含強制模式,該模式必須至少匹配一個字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/405589.html
標籤:
