Поиск этой строки и захватить имя - PullRequest
0 голосов
/ 14 января 2020

У меня есть этот код

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)

, который извлекает ULK4 из строки B4_3482_ULK4_CMV-F.

Я пытаюсь разработать регулярное выражение, которое будет извлекать GAR1 из строки A6_I032_5_GAR1_CMV-F. Пока что ничего из того, что я пробовал, похоже не работает.

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'

Я ценю все предложения до сих пор.

Ответы [ 3 ]

0 голосов
/ 14 января 2020

Ваше регулярное выражение ([\W])([^_]+)_CMV соответствует несловесному символу, за которым следует 1 или более символов без подчеркивания, сопровождаемых _CMV.

Данная тестовая строка не соответствует этому регулярному выражению, у вас нет несловарного символа, тогда результат s равен нулю.

Используйте это вместо:

s = re.search (r'([^_]+)_CMV', f )
0 голосов
/ 17 января 2020

Это первый код, который вы используете:

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), как показано в прикрепленной ссылке.

0 голосов
/ 14 января 2020

В вашей команде (r '([\W_])([^_]+)_CMV', f ) между вашей r и началом строки (') есть пробел - это приведет к синтаксической ошибке. Поместите r непосредственно перед символом начала строки, и это должно быть решено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...