正则表达式的麻烦

时间:2011-02-09 08:13:16

标签: python regex

使用正则表达式匹配'Reference:G。'中的G

我尝试使用此功能但仍然出现错误

refresidue = re.compiler(r'(s/Reference: \ //n)')

任何其他建议,因为我在这方面很新。非常感谢任何帮助。

'参考:G。'参考可以是A,C,G或T

我很抱歉这个混乱 - 我想要的是输出只打印出字符(A,C,G,T)而不是参考:。

这是我的代码

refresidue = re.compiler(r'(s / Reference:\ // n)')

a_matchref = refresidue.search(row [2])

如果a_matchref不是None:

   a_matchref = a_matchref.group(1)

3 个答案:

答案 0 :(得分:1)

你正在混合JavaScript(或其他一些正则表达式)和Python的正则表达式语法;正则表达式本身也很奇怪。此外,re.compile()编译正则表达式,它与任何内容都不匹配。

假设您想在文本Reference:之后匹配单个字母数字字符,请尝试以下操作:

refresidue = re.search(r"Reference:\s*(\w)", your_text_to_be_matched).group(1)

答案 1 :(得分:1)

以下是我如何逐步解决问题的方法。即使经过几年的regexp经验,一些特殊的语法总是让我无法理解。在这种情况下,最好从一个完全符合你想要的短表达开始。

让我们使用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。

答案 2 :(得分:0)

我认为这就是你所追求的,但也许你可以添加更多关于你匹配的数据类型的例子 -

import re
refresidue = re.compile(r'Reference: ([A-Z])')

你使用上面这样的:

>>>> refresidue.match("Reference: G").group(1)
'G'