【问题标题】:regular expression match Thursday, Thurs, Thur,Thu正则表达式匹配星期四、星期四、星期四、星期四
【发布时间】:2018-12-05 21:24:19
【问题描述】:

我想要一个正则表达式来匹配部分工作日名称。例如,我想匹配“Thursday”、“thurs”、“thur”或“Thu”。我试过“星期四(rsday)?”,但只匹配“星期四”和“星期四”。匹配缩写工作日的完整正则表达式会过长。我试过这个正则表达式字符串:

星期一(日)?|星期二(日)?|星期三(星期二)?|星期四(rsday)?|星期五(日)?|星期六(urday)?|星期日(日)?

我的字符串如下所示:

12 月 3 日星期一下午 1:00 首映 USPHL Sk3-Red

12 月 4 日星期二晚上 8:10 U16 USPHL Sk3-红色

12 月 6 日星期四下午 1:00 首映 USPHL Sk3-红色

【问题讨论】:

  • 什么类型的正则表达式?需要POSIX、Perl、ECMAScript等吗?
  • 我不确定这些术语是什么,但我正在运行一个 AutoIT 脚本并调用一个名为 StringRegexp() 的函数,请在此处查看详细信息"autoitscript.com/autoit3/docs/functions/StringRegExp.htm

标签: expression match partial


【解决方案1】:

在 Oracle 中,我会在我想选择字符串与工作日匹配的位置执行此操作。我怀疑您可以调整正则表达式以适应您的环境:

with tbl(str) as (
  select '3-Dec Mon 1:00pm Premiere USPHL Sk3-Red' from dual union all
  select '4-Dec Tues 8:10pm U16 USPHL Sk3-Red' from dual union all
  select '6-Dec Thursday 1:00pm Premiere USPHL Sk3-Red' from dual
)
select str
from tbl
where regexp_like(str, ' (mon|tue(s)?|wed(nes)?|Thu(r)?(s)?|fri|sat(ur)?|sun)(day)? ', 'i');

【讨论】:

  • 我真的没有解释清楚。我想比较每个工作日名称的开头到最后一个字符。所以,我想比较这样的名字:thu thur thurs 后跟“day”。我想为每个工作日名称执行此操作。用某种说法,代码会查找:thu[r[s[day]]] 和 wed[n[e[s[day]]]] 等。
  • 这就是它的作用。也许不是你需要的细节,但有足够的东西让你继续。正则表达式查找 mon OR tue (后跟可选的 's' 或 wed (后跟可选的 'nes')等,然后是可选的 'day'。要使 'day' 成为必需,删除了问题标记。正则表达式模式应该适合你。例如,这匹配 thu、thur、thurs 和 thursday。
【解决方案2】:

好的,感谢您的帮助。我最终得到了这个正则表达式:

(?i)((mon|tue(s)?|wed((((n)?e)?s)?)?|thu(r)?(s)?|fri|sat(ur) ?|太阳)(天)?)

比我想要的要复杂一些,但它确实有效。我的代码中需要大量的 cmets ;-)

【讨论】:

    猜你喜欢
    • 2014-02-23
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多