使用 Regex.named_capture 从字符串中提取日期
Extract date from string using Regex.named_capture
我想将“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"}
你想要
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})?
作为模式。 $?(\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"
字符串开头的第一个空位置(空字符串)。
经验法则:如果您不想匹配空字符串,请确保您的模式包含 obligatory 模式,那必须匹配至少一个字符。
我想将“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"}
你想要
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})?
作为模式。 $?(\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"
字符串开头的第一个空位置(空字符串)。
经验法则:如果您不想匹配空字符串,请确保您的模式包含 obligatory 模式,那必须匹配至少一个字符。