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开头的对象是可能的。是的,我已经有了。谢谢你,伙计。