正则表达式我怎样才能只得到字符串中的精确部分
Regex how can i get only exact part in a string
我应该只抓符合规则的数字。
规则:
- 应该是16位
- 前11位可以是任意数字
- 3位后全为零
- 后两位可以是任何数字。
我是这样做的;
([0-9]{11}[0]{3}[0-9]{2})
数字示例:
1234567890100012
现在我想得到数字,即使它有任何字母开头或结尾的字符串,如“abc1234567890100012abc”
我的输出应该只是像“1234567890100012”这样的数字
当我添加 [a-zA-Z]* 时,它会给出所有字符串。
还有一点是字符串的开头或结尾是否有任何数字,如“999912345678901000129999”。程序不应该接受这个。我的意思是它应该 return none 或什么都没有。我怎样才能用正则表达式写这个。
您可以使用捕获组,并匹配组前后的可选字符 a-zA-Z。
为了防止部分匹配,您可以使用单词边界 \b
或者如果字符串应该从行的开头和结尾匹配,您可以使用锚点 ^
和 $
\b[a-zA-Z]*([0-9]{11}000[0-9]{2})[a-zA-Z]*\b
您可以使用环顾四周来排除数字较多的情况before/after:
(?<!\d)\d{11}000\d\d(?!\d)
在 regex101
我应该只抓符合规则的数字。 规则:
- 应该是16位
- 前11位可以是任意数字
- 3位后全为零
- 后两位可以是任何数字。
我是这样做的;
([0-9]{11}[0]{3}[0-9]{2})
数字示例: 1234567890100012
现在我想得到数字,即使它有任何字母开头或结尾的字符串,如“abc1234567890100012abc” 我的输出应该只是像“1234567890100012”这样的数字 当我添加 [a-zA-Z]* 时,它会给出所有字符串。
还有一点是字符串的开头或结尾是否有任何数字,如“999912345678901000129999”。程序不应该接受这个。我的意思是它应该 return none 或什么都没有。我怎样才能用正则表达式写这个。
您可以使用捕获组,并匹配组前后的可选字符 a-zA-Z。
为了防止部分匹配,您可以使用单词边界 \b
或者如果字符串应该从行的开头和结尾匹配,您可以使用锚点 ^
和 $
\b[a-zA-Z]*([0-9]{11}000[0-9]{2})[a-zA-Z]*\b
您可以使用环顾四周来排除数字较多的情况before/after:
(?<!\d)\d{11}000\d\d(?!\d)
在 regex101