1

次のようなテキストでURLを検索する正規表現があります。

my_urlfinder = re.compile(r'\shttp:\/\/(\S+.|)blah.com/users/(\d+)(\/|)')
text = "blah blah http://blah.com/users/123 blah blah http://blah.com/users/353"

for match in my_urlfinder.findall(text):
    print match  #prints an array with all the individual parts of the regex 

URL全体を取得するにはどうすればよいですか?現在、matchは一致した部分(他のものに必要です)を出力するだけです...しかし、完全なURLも必要です。

4

2 に答える 2

2

グループを非キャプチャにする必要があります。

my_urlfinder = re.compile(r'\shttp:\/\/(?:\S+.|)blah.com/users/(?:\d+)(?:\/|)')

findall() キャプチャ グループがある場合の動作を変更します。グループを使用すると、グループを取得せずにグループのみを返し、代わりに一致したテキスト全体を返します。

デモ:

>>> text = "blah blah http://blah.com/users/123 blah blah http://blah.com/users/353"
>>> my_urlfinder = re.compile(r'\shttp:\/\/(?:\S+.|)blah.com/users/(?:\d+)(?:\/|)')
>>> for match in my_urlfinder.findall(text):
...     print match
... 
 http://blah.com/users/123
 http://blah.com/users/353
于 2013-03-06T14:36:57.797 に答える
1

キャプチャ グループを使用しない代わりに、すべての周りに別のグループを追加することもできます。

my_urlfinder = re.compile(r'\s(http:\/\/(\S+.|)blah.com/users/(\d+)(\/|))')

これにより、結果全体を取得しながら、内部のキャプチャ グループを保持できます。

デモ テキストの場合、次の結果が得られます。

('http://blah.com/users/123', '', '123', '')
('http://blah.com/users/353', '', '353', '')

補足として、現在の式では URL の前に空白が必要であるため、テキストが一致しない空白で始まる場合は注意してください。

于 2013-03-06T14:39:26.677 に答える