繁体   English   中英

从与给定单词相同模式的文本中查找字符串

[英]Find strings from text same pattern as given words

这是一些像

'X201i'
'B-442N-5'
'00.55005.001'
...

我想写一个python脚本,从给定的单词中学习模式。 固定长度,相同位置的相同特殊字符,相同位置的相同类型(数字或字母)。

所以我可以找到类似的字符串

'B304D'  => 'letter|number|number|number|letter'
'e-472N-5' =>'letter|-|number|number|number|letter|-|number'

有什么建议或提示吗?

您需要定义两个单独的模式以匹配两种类型的格式。

r'^(?:[A-Za-z]\d{3}[A-Za-z]|[A-Za-z]-\d{3}[A-Za-z]-\d)$'

例:

>>> import re
>>> s = ['X201i',
'B-442N-5',
'00.55005.001']
>>> [i for i in s if re.match(r'^(?:[A-Za-z]\d{3}[A-Za-z]|[A-Za-z]-\d{3}[A-Za-z]-\d)$', i)]
['X201i', 'B-442N-5']

[A-Za-z]匹配字母,而\\d匹配数字。

您可以将单词变成正则表达式,然后使用它们:

>>> import re
>>> words = 'X201i', 'B-442N-5', '00.55005.001'
>>> for word in words:
        pattern = ''.join([re.escape(c), '\d', '[A-Za-z]'][c.isdigit() - c.isalpha()]
                          for c in word) + '$'
        print pattern, 'matches', ', '.join(filter(re.compile(pattern).match, words))

[A-Za-z]\d\d\d[A-Za-z]$ matches X201i
[A-Za-z]\-\d\d\d[A-Za-z]\-\d$ matches B-442N-5
\d\d\.\d\d\d\d\d\.\d\d\d$ matches 00.55005.001

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM