Regex 需要正则表达式的帮助吗

Regex 需要正则表达式的帮助吗,regex,Regex,这就是我目前拥有的: (\d+).*?\s+(.+) 我希望它能用于以下方面: 1x apple 10x Apple seeds 5 carrots 100xPotatoes 我尝试添加[x]?最后一个,但似乎不起作用?基本上,x可能在那里,也可能不在那里。这两个选项中的任何一个都将与您的测试用例相匹配: ^(\d++).*?[x\s](\S.*)$ ^(\d+)(?:x?\s+|x(?=[A-Z]))(.+) 你没有任何干扰来显示什么不应该匹配,所以我不知道该有多咄咄逼人。第一个正则表达

这就是我目前拥有的:

(\d+).*?\s+(.+)
我希望它能用于以下方面:

1x apple
10x Apple seeds
5 carrots
100xPotatoes

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

这两个选项中的任何一个都将与您的测试用例相匹配:

^(\d++).*?[x\s](\S.*)$
^(\d+)(?:x?\s+|x(?=[A-Z]))(.+)
你没有任何干扰来显示什么不应该匹配,所以我不知道该有多咄咄逼人。第一个正则表达式要短得多,尽管比第二个正则表达式慢

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


将数字消耗到
\1
中,然后需要一个可选的
x
和一个空格,或者是一个
x
,后跟一个大写字母(我们对其进行了前瞻,以便可用于第二次捕获),然后在
\2
(\d+)[xX]?\s*(.*)
^(\d+[xX]?\s*(.*)中捕获其余部分$
如果您查看整个字符串,可能会更好一些。100xPotatos的问题是缺少您的正则表达式所需的空间:
(\d+).*?[\sx]+(.+)
@wp78de-5木琴:)(是的,不太可能)@rotaercz-我可能会更改
[xX]
x
如果你知道你没有像
1X apple
这样的字符串,那么以x开头的对象是可能的。是的,我已经有了。谢谢你,伙计。