![](/img/trans.png)
[英]I'm looking for a way to extract job numbers out of text using regular expressions with python
[英]How can I extract some patterns of sub text from a gibberish looking text using regular expressions?
我有一些文字,其中某些记录(并非全部)中提到了一个人的年龄和性别,例如28M
或35 F
或29 male
或57Female
等等。
我编写了以下正则表达式,以检查是否有任何模式匹配输入字符串中跟着M
的数字,如果是,则将其打印出来,但是代码不打印任何内容:
import re
text = 'Decision: Standard\r\n\r\n 36M NS\r\nBasic - 500th MP tdb addd cib 250th\r\n\r\nDue Date: Settlement date'
test_search = re.search('[0-9]+M', text)
if test_search:
print("Age: "+test_search.group(0)+", Gender: "+test_search.group(1))
我希望它印有“ Age: 36, Gender: M
。 但是,它什么也不做-没有错误,没有输出,什么也没有。
我尝试了re.match('[0-9]+F', text)
,也没有任何反应。
另外,我认为我必须写尽可能多的正则表达式(有28M
, 35 F
, 29Male
, 57 female
等一个)。 那是正确的方法吗? 还是有办法一次搜索/查找/匹配所有这些模式?
您可以使用此正则表达式来匹配您提到的所有情况:
results = re.findall(r'(?i)(\d+)\s*([mf]|(?:fe)?male)\b', text)
细节:
(?i)
:忽略大小写修饰符 (\\d+)
:匹配并捕获组#1中的1+个数字 \\s*
:匹配0个或多个空格 ([mf]|(?:fe)?male)
:匹配或捕获#2组中的M
或F
或male
或female
\\b
:单词边界 您可以使用this regex
([0-9]+)\\s?([M|Male|F|Female]+)
并在单独的捕获组中捕获年龄和名称。
import re
test_str = r"Decision: Standard\\r\\n\\r\\n 36M NS\\r\\nBasic - 500th MP tdb addd cib 250th\\r\\n\\r\\nDue Date: Settlement date 29 male 57Female 35 F"
pattern = r"([0-9]+)\s?([M|Male|F|Female]+)"
def return_gender_dict(match_obj):
return { 'age': match_obj[0], 'gender': match_obj[1][0].upper() }
matches = re.findall(pattern, test_str, flags=re.MULTILINE | re.IGNORECASE)
result = [return_gender_dict(match) for match in matches]
print(result)
输出:
[{'age': '36', 'gender': 'M'}, {'age': '29', 'gender': 'M'}, {'age': '57', 'gender': 'F'}, {'age': '35', 'gender': 'F'}]
尝试以下重新
(\d\d)(M|F|Male|Female|\sM|\sF|\sMale|\sFemale)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.