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

时间:2015-06-04 04:13:07

标签: python regex

这里有一些像

这样的词
'X201i'
'B-442N-5'
'00.55005.001'
...

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

所以我可以找到像

这样的类似字符串
'B304D'  => 'letter|number|number|number|letter'
'e-472N-5' =>'letter|-|number|number|number|letter|-|number'

任何建议或提示?

2 个答案:

答案 0 :(得分:1)

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

>>> 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匹配一个字母, HttpContext.Current.Session["Id"] = obj.USER_MOD_ID; HttpContext.Current.Session["Group"] = obj.GROUP_MOD_ID; HttpContext.Current.Session["Region"] = obj.REGION_ID; 匹配一个数字。

答案 1 :(得分:0)

您可以将单词转换为正则表达式,然后使用:

>>> 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