/ / Використання регулярного виразу з python re.match - python, regex

Використання регулярного виразу з python re.match - python, regex

Я новачок у python і має питання про використання регулярних виразів на рядках. В даний час я маю:

def find_ips(ip):
ip_str = "bd{1,3}.d{1,3}.d{1,3}.d{1,3}b"
p = re.compile(ip_str)

m = p.match(ip)
if m:
print "match found"
else:
print "no match"

global find_addr
find_addr = p.match(ip)
return find_addr

find_ips("this is an ip 127.0.0.1 10.0.10.5")
print find_addr

Це повертає "не відповідає". Я не бачу те, що я пропустив до цих пір. Я намагаюся вилучити ip-адреси з цього рядка, але спочатку я повинен їх знайти. Використовуючи редактор регулярного виразу, я можу використовувати той самий рядок, щоб знайти ці IP-адреси. Будь-яка допомога цінується.

Відповіді:

1 для відповіді № 1

re.match() матчі з початку рядка, я хотів би використовувати re.findall() тут, якщо ви хочете зрівняти всіх. Крім того, це найкраща практика використання сирої рядкової позначки з вашим шаблоном.

>>> import re
>>> def find_ips(str):
...     m = re.findall(r"b(?:d{1,3}.){3}d{1,3}b", str)
...     return ", ".join(m)
...
>>> print find_ips("this is an ip 127.0.0.1 10.0.10.5")
127.0.0.1, 10.0.10.5

2 для відповіді № 2

re.match лише знайде матч, якщо він знаходиться на початку рядка. re.search буде шукати весь рядок для матчу.

Крім того, звичайно, хороша ідея використовувати сирі рядки при створенні регулярного виразу:

ip_str = r"bd{1,3}.d{1,3}.d{1,3}.d{1,3}b"
#        ^

На трохи незв'язаному ноті:

find_ips("this is an ip 127.0.0.1 10.0.10.5")
print find_addr

є трохи кульда Використання зворотного значення у абонента набагато краще, ніж робити фанки з globals:

print find_ips("...")

0 для відповіді № 3
from re import findall

# The string to be checked.
string = "this is a string 126.32.13.1 with ips in 132.31.3.1 it"

# Print the matches of the regex in the string.
print findall("d+.d+.d+.d+", string)

# Output
# ["126.32.13.1", "132.31.3.1"]