搜索此字符串并捕获名称

2024-10-04 01:29:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个密码

for f in files :
## for next file name, extract gene name using regular expression pattern
## look for ..._<gene name>_CMV...
s = re.search( r'_([^_]+)_CMV', f )
## ^^^ The part captured in parentheses is group #1

gene = s.group(1)

从字符串B4_3482_ULK4_CMV-F中提取ULK4

我正在尝试开发一个正则表达式,它可以从字符串A6_I032_5_GAR1_CMV-F中提取GAR1。到目前为止,我所尝试的似乎都不起作用

s = (r '([\W_])([^_]+)_CMV', f ) - this returns a syntax error
s = re.search (r'([^_]+)_CMV', f ) - this returns an Attribute error
       Traceback (most recent call last):
       File "protocola1.py", line 21, in <module>
       gene = s.group(1)
       AttributeError: 'NoneType' object has no attribute 'group'

我感谢迄今为止所有的建议


Tags: 字符串nameinre密码forsearchgroup
3条回答

正则表达式([\W])([^_]+)_CMV匹配一个非单词字符,后跟一个或多个非下划线,后跟_CMV

给定的测试字符串与此正则表达式不匹配,如果其中没有非单词字符,则结果s为空

改用这个:

s = re.search (r'([^_]+)_CMV', f )

这是您使用的第一个代码:

s = (r '([\W_])([^_]+)_CMV', f ) - this returns a syntax error

这是上述代码的第一个解决方案:

正如您在本LINK中所看到的,上面的代码工作得非常好。在命令中,r和正则表达式的开头之间有空格。另外,当使用这个命令时,您必须使用group(2),正如您在正则表达式的附加链接中看到的那样。因为group(1)给你_(下划线)。另外,在这里您没有使用re.search,这可能会给您带来错误

您可以使用如下内容:

s = re.search (r'([\W_])([^_]+)_CMV', f)

这是您正在使用的第二个代码:

s = re.search (r'([^_]+)_CMV', f ) - this returns an Attribute error

这是上述代码的第二种解决方案:

在这个LINK中,上面的代码可以很好地工作。在您的命令中,它显示了AttributeError: 'NoneType' object has no attribute 'group',这肯定是files中确实有NONE值的标志。此外,在使用此命令时,必须使用group(1),如所附链接所示

在命令(r '([\W_])([^_]+)_CMV', f )r和字符串开头(')之间有一个空格-这将导致语法错误。将r直接放在字符串开始字符的前面,应该解决这个问题

相关问题 更多 >