首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从MRZ Passport代码字符串中提取信息?[等候接听]

如何从MRZ Passport代码字符串中提取信息?[等候接听]
EN

Stack Overflow用户
提问于 2019-06-10 01:37:27
回答 1查看 0关注 0票数 0

我想从MRZ护照代码中提取姓名,出生日期,护照号码和其他信息。我的MRZ代码如下:

代码语言:javascript
复制
"P<YEMALSHARAFI<<MARWAH<ABDULBARI<MAHYOUB<S<<08033227<1YEM9201017F2412311<<<<<<<<<<<<<<08"

首先,我想跳过前缀"P<YEM"然后存储名称变量"ALSHARAFI""MARWAH""ABDULBARI""MAHYOUB""S"以variable_1,variable_2的,variable_3的,variable_4,variable_5和跳过任何"<<""<"。之后将护照NO存储"08033227"到其变量中,然后存储国籍"YEM",性别"F",出生日期"92-01-01"和到期日期"24-12-31"

EN

回答 1

Stack Overflow用户

发布于 2019-06-10 10:57:13

该表达式将逐步捕获所有信息:

代码语言:javascript
复制
([A-Z]+)<(.+?)<<((.+?)<?)<([A-Z]+)<<([0-9]+)<([0-9]+)([A-Z]+)([0-9]{2})([0-9]{2})([0-9]{2})([0-9]+)([A-Z])([0-9]{2})([0-9]{2})([0-9]{2})([0-9]+)([<]+)([0-9]+)

我不确定某些数字,但它很容易被修改。

演示

测试

代码语言:javascript
复制
using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"([A-Z]+)<(.+?)<<((.+?)<?)<([A-Z]+)<<([0-9]+)<([0-9]+)([A-Z]+)([0-9]{2})([0-9]{2})([0-9]{2})([0-9]+)([A-Z])([0-9]{2})([0-9]{2})([0-9]{2})([0-9]+)([<]+)([0-9]+)";
        string input = @"P<YEMALSHARAFI<<MARWAH<ABDULBARI<MAHYOUB<S<<08033227<1YEM9201017F2412311<<<<<<<<<<<<<<08
P<SMITH<<ALICE<BOB<GEORGE<KATE<OTHERS<S<<08033227<1YEM9201017F2412311<<<<<<<<<<<<<<08";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}

RegEx电路

jex.im可视化正则表达式:

在此输入图像描述
在此输入图像描述

演示

代码语言:javascript
复制
const regex = /([A-Z]+)<(.+?)<<((.+?)<?)<([A-Z]+)<<([0-9]+)<([0-9]+)([A-Z]+)([0-9]{2})([0-9]{2})([0-9]{2})([0-9]+)([A-Z])([0-9]{2})([0-9]{2})([0-9]{2})([0-9]+)([<]+)([0-9]+)/gm;
const str = `P<YEMALSHARAFI<<MARWAH<ABDULBARI<MAHYOUB<S<<08033227<1YEM9201017F2412311<<<<<<<<<<<<<<08
P<SMITH<<ALICE<BOB<GEORGE<KATE<OTHERS<S<<08033227<1YEM9201017F2412311<<<<<<<<<<<<<<08`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档