我想从下面的字符串中提取“2”(00000002)。但条件是字符串应该以 *X1开头。我希望有一个通用的正则表达式,如果有任何数字,它应该返回它。
(00000002)
*X19845674367 00000002+000000000000123000KGS000CDH000002
我试过这个正则表达式-
(?<=\d)([1-9])\d*(?=\+)
但它返回所有字符串的编号,但我希望有从一个特定的标签例如. *X1任何建议都将是有益的。谢谢.
7tofc5zh1#
如果你不想使用捕获组,那么另一个有效的表达式是:
(?<=\*[^\s]+\s+0*)([1-9]+[0-9]*)(?=\+)
如果 *X1是一个固定的需求,只需将其放在 * 之后:
(?<=\*X1[^\s]+\s+0*)([1-9]+[0-9]*)(?=\+)
除了创建一个捕获组([1-9]+[0-9]*)之外,您还可以省略括号-[1-9]+[0-9]*,两者都可以。这个表达式允许前面有任何内容,然后是一些空格,然后捕获第一个数字,但忽略0前缀。您可以在这里使用它并使用演示查看深入的解释:https://regex101.com/r/gyMx2i/1
([1-9]+[0-9]*)
[1-9]+[0-9]*
bqf10yzr2#
^\*X1.*?(\d)\+
此正则表达式搜索以*X1开头的字符串,任意个字符,直到找到后跟+符号的数字序列。这些数字保存在一个组中,可以使用match对象的group方法访问该组。如果no matchis found,则得到None。
*X1
+
None
2条答案
按热度按时间7tofc5zh1#
如果你不想使用捕获组,那么另一个有效的表达式是:
如果 *X1是一个固定的需求,只需将其放在 * 之后:
除了创建一个捕获组
([1-9]+[0-9]*)
之外,您还可以省略括号-[1-9]+[0-9]*
,两者都可以。这个表达式允许前面有任何内容,然后是一些空格,然后捕获第一个数字,但忽略0前缀。
您可以在这里使用它并使用演示查看深入的解释:
https://regex101.com/r/gyMx2i/1
bqf10yzr2#
此正则表达式搜索以
*X1
开头的字符串,任意个字符,直到找到后跟+
符号的数字序列。这些数字保存在一个组中,可以使用match对象的group方法访问该组。如果no matchis found,则得到
None
。