正则表达式将 10 位数字与特定模式完全匹配
Regex to match 10 digit exactly with specific pattern
假设我给出一个模式 123* 或 1234* ,我想匹配以该模式开头的任何 10 位数字。它应该正好有 10 位数字。
示例:
模式:123 应匹配 1234567890 但不匹配 12345678
我试过这个正则表达式:(^(123)(\d{0,10}))(?(1)\d{10}).. 显然它没有用。我试图将模式和剩余数字分组为两个不同的组。它匹配捕获组后的 10 个数字 (https://regex101.com/)。如何检查捕获的组是否正好是 10 位数字?或者这里有什么好的诀窍。请指导我。
我会保持简单:
import re
text = "1234567890"
match = re.search("^123\d{7}$|^1111\d{6}$", text)
if match:
print ("matched")
只需将您的 2 个图案放入其中,就可以开始了!请注意,123* 会捕获 1234*,因此我使用 1111\d{6} 作为示例
听起来像是 positive lookahead:
的情况
(?=123)\d{10}
这将匹配任何恰好 10 位数字的序列,但前提是前缀为 123
。测试一下 here.
与前缀 1234
类似:
(?=1234)\d{10}
当然,如果您预先知道前缀长度,则可以使用 123\d{7}
,但是您必须在每次更改前缀时更改范围限制(例如:1234\d{6}
)。
此外,为确保仅捕获 10 位数字的孤立组,您可能需要使用(零长度)单词边界来锚定上述表达式 \b
:
\b(?=123)\d{10}\b
或者,如果您的序列可以出现在 单词 的内部,您可能希望在 \d
上使用负向后视和前视(如@Wiktor 评论中所建议):
(?<!\d)(?=123)\d{10}(?!\d)
假设我给出一个模式 123* 或 1234* ,我想匹配以该模式开头的任何 10 位数字。它应该正好有 10 位数字。
示例:
模式:123 应匹配 1234567890 但不匹配 12345678
我试过这个正则表达式:(^(123)(\d{0,10}))(?(1)\d{10}).. 显然它没有用。我试图将模式和剩余数字分组为两个不同的组。它匹配捕获组后的 10 个数字 (https://regex101.com/)。如何检查捕获的组是否正好是 10 位数字?或者这里有什么好的诀窍。请指导我。
我会保持简单:
import re
text = "1234567890"
match = re.search("^123\d{7}$|^1111\d{6}$", text)
if match:
print ("matched")
只需将您的 2 个图案放入其中,就可以开始了!请注意,123* 会捕获 1234*,因此我使用 1111\d{6} 作为示例
听起来像是 positive lookahead:
的情况(?=123)\d{10}
这将匹配任何恰好 10 位数字的序列,但前提是前缀为 123
。测试一下 here.
与前缀 1234
类似:
(?=1234)\d{10}
当然,如果您预先知道前缀长度,则可以使用 123\d{7}
,但是您必须在每次更改前缀时更改范围限制(例如:1234\d{6}
)。
此外,为确保仅捕获 10 位数字的孤立组,您可能需要使用(零长度)单词边界来锚定上述表达式 \b
:
\b(?=123)\d{10}\b
或者,如果您的序列可以出现在 单词 的内部,您可能希望在 \d
上使用负向后视和前视(如@Wiktor 评论中所建议):
(?<!\d)(?=123)\d{10}(?!\d)