我的文字如下:
9/91 a1 2a cx.papaya 94000
9/92 b2 3a x44b mango 10220
9/93 3 3a x333 pineapple
9/94 x4 cx.apple 94000
9/95 5 55 cyz cx.orange
我试着开发一个正则表达式来找出下面的单词表,但它不工作。
正则表达式是^[0-9\/]+.*\s(.*)\s(\d{5})$
。
这是我的期望:
| 第1组|第二组|第三组|
| - -----|- -----|- -----|
| 9/91 a1 2a|木瓜|九万四千|
| 9/92 b2 3a x44b|芒果|10220|
| 9/93 3 3a x333|菠萝||
| 9/94 x4|苹果|九万四千|
| 9/95 5 55 cyz|橙子||
4条答案
按热度按时间gorkyyrv1#
以下是我的尝试:
演示:regex101
^
:启动锚点(\d+\/\d+\hx\d+)
:第一个捕获组,匹配图案9/91 x1
(一个或多个数字\d+
,带转义字符的斜杠\/
,一个或多个数字\d+
,空格\h
,字符x
,一个或多个数字\d+
)\h(?:\w+\.)?
:一个空格\h
,后跟一个非捕获组,匹配可选模式cx.
(\w+)
:第二个捕获组,匹配任意单词字符\w+
一次或多次\h?(\d+)?
第三捕获组(可选),可选空间\h?
,可选捕获组(\d+)?
$
:端锚感谢第四只鸟在第三个捕捉组中删除尾随空格
演示:regex101
(?:\h\w+)+
添加到第一个捕获组中,以匹配9/91
模式之后的多个字符组,如a1 2a
\w+
更改为[a-zA-Z]+
,以便只匹配单词字符。rqqzpn5f2#
您忘记了为第一个部分创建一个组并说明
x
序列。您还应该将最后一部分设置为可选的,并在第二部分中说明前导可选前缀。这些更改的结果可能如下所示:您可以添加惰性组
(?: \w+)+?
,以反映更改后问题中第一个组的附加尾随序列:wnvonmuf3#
既然你也标记了php,我将为你的问题提供一个没有正则表达式的PHP解决方案,所以你也可以检查它作为一个替代方案。
group
变量的输出与预期的一样。基本上你的弦是有规律的。
(根据您在问题中的最新输入更改更新了我的答案)。
rqcrx0a64#
这样的东西可能会有所帮助:
你可以尝试在一些网站上使用regexp,比如https://regex101.com/