Regex 从字符串中提取每个唯一的数据
我一直在尝试设置正则表达式提取过程,但没有成功 我有一组日期值,格式如下。我需要能够提取这些独特的个人日期 如果只有一个值,则为mm/dd/yyyy的标准简单格式。那个很简单 如果有多个日期值,则其格式如下: 2016年2月5日、12日、19日、26日、3月4日、11日 我需要将其转换为2016年5月2日、2016年12月2日等 最后,我将把这些日期插入数据库Regex 从字符串中提取每个唯一的数据,regex,Regex,我一直在尝试设置正则表达式提取过程,但没有成功 我有一组日期值,格式如下。我需要能够提取这些独特的个人日期 如果只有一个值,则为mm/dd/yyyy的标准简单格式。那个很简单 如果有多个日期值,则其格式如下: 2016年2月5日、12日、19日、26日、3月4日、11日 我需要将其转换为2016年5月2日、2016年12月2日等 最后,我将把这些日期插入数据库 我是不是走错了路?感谢您的建议。假设您正在注册的数据中没有任何偏差或异常,可以在设置大小写敏感度的情况下应用以下正则表达式,并允许您访问
我是不是走错了路?感谢您的建议。假设您正在注册的数据中没有任何偏差或异常,可以在设置大小写敏感度的情况下应用以下正则表达式,并允许您访问所需的信息。对于正则表达式,重要的是“了解您的数据”,因为这个变量可以极大地改变正则表达式的构造——特异性和清晰性之间的平衡很重要,因为正则表达式很容易变得笨拙和神秘 将月份另存为:
([A-Z][A-Z][A-Z])
//这可以是$1变量(以后有用)
将日期值另存为:\s*(?:([0-9]?[0-9]),\s)*
/$2变量应可用于访问此值列表
将年份值另存为:([0-9]{4,4})
/$3变量应可用于访问这些值注意:这仅适用于设计为#####格式的日期,尽管可以更改以处理不同的格式;我只是从你提供的例子说起
把它们串在一起你会得到:(?:([A-Z][A-Z][A-Z])\s*(?:([0-9]?[0-9]),\s)*+([0-9]{4,4})
然后可以用这些值构造对象,这样就不会产生一堆混乱的数据。如果我正确地解决了您的问题,请告诉我。如果我遗漏了什么,或者您忘记了提及一些附加功能,我将很乐意提供帮助。如果您尝试使用一个正则表达式来完成,这将是一个完整的意大利面条:
- 你必须在某处硬编码月份的名称和相应的数字
- 年份不在月份的天数列表之后,而是在所有月份名称的列表之后——今年的月份天数
# this is the input
dates = "Feb 5, 12, 19, 26, Mar 4, 11 2016, Jul 5, 7, 19, 26, May 4, 11 2017"
# a hash with month name => month number
MONTHS = {
'Jan' => '01',
'Feb' => '02',
'Mar' => '03',
'Apr' => '04',
'May' => '05',
'Jun' => '06',
'Jul' => '07',
'Aug' => '08',
'Sep' => '09',
'Oct' => '10',
'Nov' => '11',
'Dec' => '12',
}
# match and extract three things:
# month - the first found month name (three letters)
# days - list of days separated by commas and spaces for this month
# for example 5, 12, 19, 26,
# year - the first found year (four digits)
# ,? is because we don't have , after the last day of the year
while dates =~ /(\w{3}) ((?:\d\d?,? )+).*?(\d{4})/
month, days, year = $1, $2, $3
# to each day collate a date in the wanted format
# MONTHS[month] gets the month number from the hash above
# sprintf simply makes sure that one digit days will have a leading 0
dates_this_month = days.split(/,? /).map do |day|
"#{MONTHS[month]}/#{sprintf('%02d', day)}/#{year}"
end.join ', '
# substitute the dates for this month with the new format
dates.sub! "#{month} #{days}", "#{dates_this_month}, "
end
# remove leftover years
dates.gsub! /, \d{4}/, ''
现在,
日期
是所需格式。1。单靠正则表达式无法完成这项工作,您很可能需要一种编程语言。2.我将解析输入,而不是将其正则化。我感谢乔纳森。数据是来自提要的原始数据。我知道这并不理想。