regex 提取白色和某些特定字符分割的单词

ctehm74n  于 2023-04-13  发布在  其他
关注(0)|答案(3)|浏览(94)

我试图从字符串中提取“单词”,特别是“日期”字符串组件。

oct 12:30
2023 09:05 04
%yyyy %hh:%ii %mm
mar 2, 1945 * matches "2," instead of 2"
mar 2,1945  * matches "2,1945" instead of "2" "1945"
mar2,1945   * ideally, "mar2" should be "mar" "2" 
01-02-03
04:05:06

我想我已经很接近了:((^|%|[0-9]).+?(?=[,:]|\W|$))
但这是将“2,1945”提取为一个项目。我尝试了((^|%|[0-9]).+?(?=[[^,]:]|\W|$)),但一点帮助都没有。
基本上,我需要每一个字打破白色,或非字母数字字符。(即::/-等),以及它们是否打破了字母/数字模式(即:mar 2应分别匹配mar和2)

bjp0bcyl

bjp0bcyl1#

不完全清楚可以提供什么输入,所以我在这里部分猜测。
基于所提供的示例的组合,我建议使用此:

%?[a-zA-Z]+|%?\d+[a-zA-Z]*

它将匹配可选的%,后跟字母,或数字和可选字母。
示例:

oct 12:30 : ['oct', '12', '30']
2023 09:05 04 : ['2023', '09', '05', '04']
%yyyy %hh:%ii %mm : ['%yyyy', '%hh', '%ii', '%mm']
mar 2, 1945 : ['mar', '2', '1945']
mar 2,1945 : ['mar', '2', '1945']
mar2,1945 : ['mar', '2', '1945']
01-02-03 : ['01', '02', '03']
04:05:06 : ['04', '05', '06']
10th of April, 2023 : ['10th', 'of', 'April', '2023']
%d%Od of %MM, %yyyy : ['%d', '%Od', 'of', '%MM', '%yyyy']

演示here

5n0oy7gb

5n0oy7gb2#

你可以尝试用3个捕获组来执行这个正则表达式:

([a-zA-Z]+)[ ,]*(\d+)\,\s*(\d{4})

Demo here

dvtswwa3

dvtswwa33#

(\d{1,4}|\w{1,10}|%\w{1,4})
\d{1,4} match number 2 to 4 digits (for all numbers)
or 
\w{1,10} match 1 to 10 characters (for all months)
or 
%\w{1,4} match 2-4 characters start with %

mar2,1945 -> mar 2 1945

但是%5是匹配的,如果你不想要它;将\w改为[a-zA-Z]

相关问题