[英]Given 2 Strings str and word, you have to find how many words can you make from that given string
[英]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.