需要正则表达式的帮助

时间:2018-05-22 23:04:38

标签: regex

这就是我目前所拥有的:

(\d+).*?\s+(.+)

我希望它可以用于以下方面:

1x apple
10x Apple seeds
5 carrots
100xPotatoes

我尝试添加[x]?对于最后一个但它似乎不起作用?基本上x可能存在也可能不存在。

1 个答案:

答案 0 :(得分:0)

其中任何一个都符合您的测试用例:

^(\d++).*?[x\s](\S.*)$
^(\d+)(?:x?\s+|x(?=[A-Z]))(.+)

你没有任何干扰者可以表明不应该匹配的东西,所以我不知道会有多么激进。第一个正则表达式比第二个正则表达式要短得多。

first regex使用占有量词来阻止回溯,确保在\1中捕获所有前导数字,然后在x或空格字符之前懒惰地匹配任意数量的字符,之后它会将非空格字符及其后的所有内容捕获到\2

second regex将数字消耗到\1,然后需要一个可选的x和一个空格,或者一个x后跟一个大写字母(我们使用前瞻性)因为它可用于第二次捕获),然后它会在\2中捕获其余部分。