<p>您可以编写一个小型生成器函数,其中包含正则表达式中的替代项:</p>
<pre><code>import re
data = """My name is ali, Date is 21/08/2018 Total amount is chandanpatil@yahoo.com euros 10,2018/13/09 saylijawale@gmail.com. https://imarticus.com Account number is 123456"""
def finder(string=None):
# define the tokens
tokens = {
'DATESTR': r'\d{2}/\d{2}/\d{4}',
'EMAILIDSTR': r'\S+@\S+',
'URLSTR': r'https?://\S+',
'NUMSTR': r'\d+'}
# build the expression
# using join and a listcomp
rx = re.compile("|".join(
['(?P<{}>{})'.format(key, value)
for key, value in tokens.items()])
)
# loop over the found matches
for match in rx.finditer(string):
for token in tokens:
value = match.group(token)
if value:
if token in ['DATESTR', 'EMAILIDSTR']:
value = value.rstrip('.')
yield (value, token)
break
# iterate over the found tokens
for value, token in finder(data):
print("Value: {}, Token: {}".format(value, token))
</code></pre>
<p>屈服</p>
<pre><code>Value: 21/08/2018, Token: DATESTR
Value: chandanpatil@yahoo.com, Token: EMAILIDSTR
Value: 10, Token: NUMSTR
Value: 2018, Token: NUMSTR
Value: 13, Token: NUMSTR
Value: 09, Token: NUMSTR
Value: saylijawale@gmail.com, Token: EMAILIDSTR
Value: https://imarticus.com, Token: URLSTR
Value: 123456, Token: NUMSTR
</code></pre>
<p/><hr/>
见<a href="https://regex101.com/r/9prPiH/1" rel="nofollow noreferrer"><strong>a demo for the expression on regex101.com</strong></a>。