Получить первое слово в скобках в Python - PullRequest
0 голосов
/ 26 октября 2018

Я погуглил и прочитал некоторые коды здесь Регулярное выражение для возврата текста в скобках

, но, например, скажем, у меня есть следующая строка

"[Руководство]Сила (STR) рекомендуется для Воинов (Воины -> Берсеркер) "

Как бы я выводил только" STR ", а не (Воины -> Берсеркер)?

Спасибо!

Ответы [ 5 ]

0 голосов
/ 26 октября 2018

Вы можете нарезать строку с индексами, возвращаемыми str.find:

s = "[Guide] Strength (STR) is recommended on Warriors (Warriors -> Berserker)"
s[s.find('(')+1:s.find(')')]

, что возвращает: STR

0 голосов
/ 26 октября 2018

Используйте re.search с группой, как описано в @KingRadical, или используйте re.findall, а затем выберите первый элемент.

s = "[Guide] Strength (STR  are long) is recommended on Warriors (Warriors -> Berserker)"
re.findall('\(([^\)]+)\)', s) # returns all matches

>>> ['STR  are long', 'Warriors -> Berserker']

re.findall('\(([^\)]+)\)', s)[0] # returns the first match which is what you want.

>>> 'STR  are long'

Примечание:

Если в строке нет совпадений s , re.findall вернет пустой список , а re.search вернет None объект.

0 голосов
/ 26 октября 2018

Или re.split:

>>> import re
>>> s="[Guide] Strength (STR) is recommended on Warriors (Warriors -> Berserker)"
>>> result = re.split(r"\s+(?=[^()]*(?:\(|$))", s)
>>> next((i[1:-1] for i in result if i[0]=='(' and i[-1]==')'),'No sub-strings that are surrounded by parenthesis')
'STR'
>>> 

Примечание: здесь, если строки не содержат подстрок, заключенных в круглые скобки, он выведет 'No sub-strings that are surrounded by parenthesis', если это не нужно, вы можете просто сделать:

>>> next((i[1:-1] for i in result if i[0]=='(' and i[-1]==')'))

Или:

>>> [i[1:-1] for i in result if i[0]=='(' and i[-1]==')'][0]
0 голосов
/ 26 октября 2018
import re
str1 = "[Guide] Strength (STR) is recommended on Warriors (Warriors -> Berserker)"
m = re.findall(r'(\(\w+\))',str1)
print m

Result:['(STR)']

Здесь строка, которую нам нужно найти в данном тексте, расположена между () без пробелов и специальных символов, поэтому (\ w +) означает, что в ((*) * имеется более одного символа

0 голосов
/ 26 октября 2018
>>> import re
>>> s = "[Guide] Strength (STR) is recommended on Warriors (Warriors -> Berserker)"
>>> re.search(r'\(([^)]+)\)', s).group(1)
<<< 'STR'

re.search возвращает первое совпадение
.group(1) возвращает содержимое первой группы захвата, которая ([^)]+)

...