2015-05-21 4 views
-2

Я пытаюсь узнать, как использовать регулярные выражения с Python. Я хочу, чтобы получить идентификационный номер (в скобках), в конце концов из строки, выглядит следующим образом:Извлечь часть строки, переменной длины

"This is a string of variable length (561401)" 

Номер ID (561401 в данном примере) может быть переменной длины, так же как текст.

"This is another string of variable length (99521199)" 

Моя кодирование не удается:

import re 
import selenium 

# [Code omitted here, I use selenium to navigate a web page] 

result = driver.find_element_by_class_name("class_name") 
print result.text # [This correctly prints the whole string "This is a text of variable length (561401)"] 

id = re.findall("??????", result.text) # [Not sure what to do here] 
print id 
+1

Большой ресурс для этого http://regex101.com – kaz

+0

https://docs.python.org/ 2/библиотека/re.html – SwankSwashbucklers

ответ

2

Это должно работать для примера:

(?<=\()[0-9]* 

?<= Спички что-то предшествующее группу, которую вы ищете, но не потребляет его. В этом случае я использовал \(. (Это специальный символ, поэтому он должен быть экранирован \. [0-9] совпадает с любым количеством. В * средств соответствуют любому количеству непосредственно предыдущему правила, так [0-9]* означает матч, как много чисел, так как есть.

1

Вы можете использовать это простое решение:

>>> originString = "This is a string of variable length (561401)" 
>>> str1=OriginalString.replace("("," ") 
'This is a string of variable length 561401)' 
>>> str2=str1.replace(")"," ") 
'This is a string of variable length 561401 ' 
>>> [int(s) for s in string.split() if s.isdigit()] 
[561401] 

Во-первых, я заменяю скобки на пробел. а затем я искал новую строку для целых чисел.

1

Нет необходимости в использовании регулярных выражений здесь, если он всегда находится в конце и всегда в скобках вы можете разделить, извлечь последний элемент и удалить скобку, взяв подстроку ([1: -1]). Regexes относительно дорогостоящие.

line = "This is another string of variable length (99521199)" 
print line.split()[-1][1:-1] 

Если вы действительно хотели использовать регулярные выражения, я хотел бы сделать это:

import re 
line = "This is another string of variable length (99521199)" 
id_match = re.match('.*\((\d+)\)',line) 
if id_match: 
    print id_match.group(1) 
Смежные вопросы