这就是我目前所拥有的:
(\d+).*?\s+(.+)
我希望它可以用于以下方面:
1x apple
10x Apple seeds
5 carrots
100xPotatoes
我尝试添加[x]?对于最后一个但它似乎不起作用?基本上x可能存在也可能不存在。
答案 0 :(得分:0)
其中任何一个都符合您的测试用例:
^(\d++).*?[x\s](\S.*)$
^(\d+)(?:x?\s+|x(?=[A-Z]))(.+)
你没有任何干扰者可以表明不应该匹配的东西,所以我不知道会有多么激进。第一个正则表达式比第二个正则表达式要短得多。
first regex使用占有量词来阻止回溯,确保在\1
中捕获所有前导数字,然后在x
或空格字符之前懒惰地匹配任意数量的字符,之后它会将非空格字符及其后的所有内容捕获到\2
。
second regex将数字消耗到\1
,然后需要一个可选的x
和一个空格,或者一个x
后跟一个大写字母(我们使用前瞻性)因为它可用于第二次捕获),然后它会在\2
中捕获其余部分。