<p>在Python中,您可以按照以下方式进行操作:</p>
<pre><code>test='''\
win-abc123
def456-windows
123123-WIN-ghi789
rhel-jkl012
45u8234dgf-redhat-mno345
pqr678-RHEL'''
from itertools import chain
os_map = {frozenset(['win', 'windows', 'WIN']):'WIN', frozenset(['rhel', 'redhat', 'RHEL',]): 'RHEL'}
all_os=set(chain(*os_map.keys()))
for line in test.splitlines():
tgt=filter(lambda e: e in all_os, line.split('-'))
if tgt:
print os_map[filter(lambda k: tgt[0] in k, os_map.keys())[0]]
</code></pre>
<p>你也可以做一个regex的dict:</p>
<pre><code>import re
os_reg={re.compile(r'\b(win|windows|WIN)\b'):'WIN', re.compile(r'\b(rhel|redhat|RHEL)\b'): 'RHEL'}
for line in test.splitlines():
for pat, v in os_reg.items():
if pat.search(line):
print line, v
break
</code></pre>
<p>或者将set和regex结合起来执行以下操作:</p>
<pre><code>os_map = {frozenset(['win', 'windows', 'WIN']):'WIN', frozenset(['rhel', 'redhat', 'RHEL',]): 'RHEL'}
for k, v in os_map.items():
test=re.sub(r'\b({})\b'.format('|'.join(k)), v, test)
for line in test.splitlines():
m=re.search(r'\b({})\b'.format('|'.join(os_map.values())), line)
if m:
print line, m.group(0)
</code></pre>