正则表达式问题
我想用正则表达式在字符串 'Reference: G. ' 中找到字母 G。
我试过这样做,但还是出现了错误。
refresidue = re.compiler(r'(s/Reference: \ //n)')
有没有其他建议?因为我对这个还很陌生,任何帮助都非常感谢。
'Reference: G. ' 中的字母可以是 A、C、G 或 T。
抱歉让你们困惑了,我想要的结果是只打印出字母(A、C、G、T),而不是 'Reference: '。
这是我的代码:
refresidue = re.compiler(r'(s/Reference: \ //n)')
a_matchref = refresidue.search(row[2])
如果 a_matchref 不为空:
a_matchref = a_matchref.group(1)
3 个回答
我觉得这就是你想要的,不过你可以再加一些关于你要匹配的数据类型的例子。
import re
refresidue = re.compile(r'Reference: ([A-Z])')
你可以这样使用上面的内容:
>>>> refresidue.match("Reference: G").group(1)
'G'
这是我一步一步解决问题的方法。即使我有好几年的正则表达式经验,有些特定的语法我还是记不住。在这种情况下,最好从一个简单的表达式开始,这个表达式一定能匹配到你想要的内容。
我们来用一下 re
模块。
>>> import re
现在出错的地方在哪里呢?
>>> refresidue = re.compiler(r'(s/Reference: \ //n)')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'compiler'
哦,那 re
模块有什么属性呢?
>>> dir(re)
['DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 'S',
'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE', 'X', '_MAXCACHE', '__all__',
'__builtins__', '__doc__', '__file__', '__name__', '__version__', '_alphanum',
'_cache', '_cache_repl', '_compile', '_compile_repl', '_expand', '_pattern_type',
'_pickle', '_subx', 'compile', 'copy_reg', 'error', 'escape', 'findall', 'finditer',
'match', 'purge', 'search', 'split', 'sre_compile', 'sre_parse', 'sub', 'subn', 'sys',
'template']
所以应该是 re.compile
。
>>> refresidue = re.compile(r'(s/Reference: \ //n)')(re)
好的,编译完成。我们来用它匹配字符串。
>>> refresidue.match('Reference: G')
没有匹配到?那就简化一下表达式吧。
>>> refresidue = re.compile(r'Reference:')
>>> refresidue.match('Reference: G')
<_sre.SRE_Match object at 0x7fe14701f030>
当然应该能匹配。要不要加个 G 呢?
>>> refresidue = re.compile(r'Reference: G')
>>> refresidue.match('Reference: G')
<_sre.SRE_Match object at 0x7fe14701f098>
对的。我想要整个字母表。
>>> refresidue = re.compile(r'Reference: [A-Z]')
>>> refresidue.match('Reference: G')
<_sre.SRE_Match object at 0x7fe14701f030>
我还想单独提取出某个字母。
>>> refresidue = re.compile(r'Reference: ([A-Z])')
>>> refresidue.match('Reference: G')
<_sre.SRE_Match object at 0x7fe1470b9738>
到现在为止都没问题。那么我怎么才能获取括号里的部分呢?
>>> dir(refresidue.match('Reference: G'))
['__copy__', '__deepcopy__', 'end', 'expand', 'group', 'groupdict', 'groups', 'span', 'start']
group
听起来不错。
>>> refresidue.match('Reference: G').group
<built-in method group of _sre.SRE_Match object at 0x7fe1470b9738>
所以这是一个方法。我们试着调用它。
>>> refresidue.match('Reference: G').group(0)
'Reference: G'
>>> refresidue.match('Reference: G').group(1)
'G'
看,得到了 G。
你把JavaScript(或者其他一些正则表达式的写法)和Python的正则表达式语法搞混了,而且这个正则表达式本身也有点奇怪。另外,re.compile()
是用来编译一个正则表达式的,它并不是用来匹配任何东西的。
假设你想在文本Reference:
后面匹配一个字母或数字,可以试试下面的代码:
refresidue = re.search(r"Reference:\s*(\w)", your_text_to_be_matched).group(1)