Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于提取特定变量和值的正则表达式_Python_Regex_Regex Lookarounds_Regex Group_Regex Greedy - Fatal编程技术网

Python 用于提取特定变量和值的正则表达式

Python 用于提取特定变量和值的正则表达式,python,regex,regex-lookarounds,regex-group,regex-greedy,Python,Regex,Regex Lookarounds,Regex Group,Regex Greedy,我正在使用GoogleVisionAPI从申请表的图像中提取文本(手写加计算机书写)。响应是一个长字符串,如下所示 字符串: "A. Bank Challan Bank Branch ca ABC muitce Deposit ID VOSSÁETM-0055 Deposit Date 16 al 19 ate B. Personal Information: Use CAPITAL letters and leave spaces between words. Name: MUHAMMAD H

我正在使用GoogleVisionAPI从申请表的图像中提取文本(手写加计算机书写)。响应是一个长字符串,如下所示

字符串:

"A. Bank Challan
Bank Branch
ca
ABC muitce
Deposit ID VOSSÁETM-0055
Deposit Date 16 al 19
ate
B. Personal Information: Use CAPITAL letters and leave spaces between words.
Name: MUHAMMAD HANIE
Father's Name: MUHAMMAD Y AQOOB
Computerized NIC No. 44 603-5 284 355-3
D D M m rrrr
Gender: Male Age: (in years) 22 Date of Birth ( 4-08-1999
Domicile (District): Mirpuskhas Contact No. 0333-7078758
(Please do not mention converted No.)
Postal Address: Raheel Book Depo Naukot Taluka jhuddo Disstri mes.
Sindh.
Are You Government Servant: Yes
(If yes, please attach NOC)
No
✓
Religion: Muslim
✓
Non-Muslimo
C. Academic Information:
B
Intermediate/HSSC ENG Mirpuskhas Bise Match
Seience BISEmirpuskhas Match
2016
2014
Matric/SSC"
整个响应对我来说没有用处,但是我需要解析响应以获得特定字段,如姓名、父亲姓名、NIC号、性别、年龄、出生日期、住所和联系方式

我正在使用Python中的正则表达式库(re)为每个字段定义模式。例如:

import re
name ='Name: \w+\s\w+'
fatherName = 'Father\'s Name: \w+\s\w+\s\w+'
age ='Age: \D+\d+'

print(re.search(name,string).group())
print(re.search(fatherName, string).group())
print(re.search(age,string).group())
输出:

"Name: MUHAMMAD HANIE
Father's Name: MUHAMMAD Y AQOOB
Age: (in years) 22"
然而,这些都不是健壮的模式,我不知道这种方法是否好。我也不能提取在同一行上的字段,比如性别和年龄


我如何解决这个问题

它可能不可靠,但是可以设计一个表达式来提取您想要的三个参数。我可以帮你这么做。也许,您可能希望有一个具有多个边界的表达式:

(?=[A-Z])((Name:[A-Z-a-z\s]+\n|\s)|(Father\x27s\sName[A-Z-a-z\s\.]+\n|\s)|(Age:\s\(in\syears\)\s[0-9]+))
专注于您希望提取的文本可能会更好

差异
  • 年龄:这个变量似乎很容易提取
  • Name和Father's Name:您可能希望检查这两个变量中的值的外观,以便将其添加到char列表中。我刚刚假设,这可能是一个字符列表:
    [a-Z-a-Z\s\.]
    。但是,您可以根据自己的意愿对其进行更改/简化

正则描述图 这有助于可视化表达式:

Python测试
#-*-编码:UTF-8-*-
进口稀土
string=”“”
A.查兰银行
银行分行
ca
ABC muitce
存款ID VOSSÁETM-0055
存款日期16 al 19
吃了
个人信息:使用大写字母,并在单词之间留空格。
姓名:穆罕默德·哈尼
父亲的名字:穆罕默德·亚库布
计算机化NIC编号44 603-5 284 355-3
D D M rrrr
性别:男性年龄(以年为单位)22出生日期(1999年8月4日)
住所(地区):米尔普斯卡联系电话:0333-7078758
(请不要提及转换的编号)
邮政地址:Raheel Book Depo Naukot Taluka jhuddo Disstri mes。
信德省。
你是公务员吗?是的
(如果是,请附上NOC)
不
✓
宗教:穆斯林
✓
非穆斯林
C.学术信息:
B
中级/HSSC工程-米尔普斯卡比赛
赛因斯·比塞米尔普斯卡比赛
2016
2014
Matric/SSC”“”
表达式=r'(?=[A-Z])((姓名:[A-Z-A-Z\s]+\n |\s)|(父亲\x27s\sName[A-Z-A-Z\s\.]+\n |\s)|(年龄:\s\(in\syears\)\s[0-9]+)
匹配=重新搜索(表达式、字符串)
如果匹配:

打印(“YAAAY!\”+match.group(2)+“\”是一个匹配项,请分组尝试捕获
\n姓名:(.*)姓名:(.*)计算机NIC号:(.*)\n.*\n发件人:(\w+)年龄:\(以年计)(\d+)出生日期:(*([\d-]+)\n地区:(.*)联系电话:([\d-]+)
请查看感谢@thefthbird。您的模式可以提供帮助。:)有数千个这样的字符串。我需要分别为每个字段定义模式,以便将它们捕获到适当的变量中,并相应地填充数据库中的列。感谢@Emma提供如此详细的答案和链接。不仅有三个字段,还有姓名、父亲姓名、NIC编号、性别、年龄、DoB、DOMCIle和联系人号码。实际上有数千个这样的字符串。我需要分别为每个字段定义模式,以便将它们捕获到适当的变量中,并相应地填充数据库中的列。dob='Date of Birth(*[\d-]+)'print(re.search(dob,data.group())输出:Date of Birth(4-08-1999。在定义模式时,知道如何删除“(”或任何不必要的词吗?我只需要4-08-1999。谢谢!:)我不习惯这个平台,所以需要一些时间才能使它对我有用。