tattyan3
@tattyan3 (tatsuji shimo)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

pythonのマッチング

python なぜこうなるのか説明を求める。

import re

s = 'aaa@xxx.com bbb@yyy.net ccc@zzz.org'
print("s=",s)
t = re.match(r'([a-z]+)\@([a-z]+)\.org$', s) #最初にマッチするもの最初にマッチするの終わりやろ?
# <re.Match object; ccc@zzz.org 1LINE見ていないの? sp で終わりとかなら、\sを含む文字列にマッチング出来ないぞ\n?を含むのも
print("t=",t)#orgでもないのに何でマッチするんや1文字列マッチ開始したとこから見とるんか^$いらんやろ
# print したって、プログラム上、変数として使い物に使い物にならないのなぁ。何のためにやるんや
#
# なんか、match ができているのに、なんで、None が返ってくるんやろうか
u=re.match(r'([a-z]+)@([a-z]+)\.com', s)
print("u=",u)
# <re.Match object; span=(0, 11),aaa@xxx.com
v =print(re.match(r'([a-z]+)@([a-z]+)\.com', s)) #これは出来るが表示している文字列は入らない
print("v=",v)
print("print is=",re.match(r'([a-z]+)@([a-z]+)\.com', s))
# <re.Match object; span=(0, 11), match='aaa@xxx.com'>
if t == None or u == None:
    print("None")
else:
    my_mach_line = t.group(0)
    print(my_mach_line)
    my_mach =my_mach_line.split(', ')
    print("mach is=",my_mach)

PS C:\xampp\htdocs\my_python>  c:; cd 'c:\xampp\htdocs\my_python'; & 'c:\Python\python.exe' 'c:\Users\tatty\.vscode\extensions\ms-python.debugpy-2024.0.0-win32-x64\bundled\libs\debugpy\adapter/../..\debugpy\launcher' '56349' '--' 'C:\xampp\htdocs\my_python\py_seiki.py' 
s= aaa@xxx.com bbb@yyy.net ccc@zzz.org
t= None
u= <re.Match object; span=(0, 11), match='aaa@xxx.com'>
<re.Match object; span=(0, 11), match='aaa@xxx.com'>
v= None
print is= <re.Match object; span=(0, 11), match='aaa@xxx.com'>
None
PS C:\xampp\htdocs\my_python> 

どうにもよくわからない。

t = re.match(r'((([a-z]+)\@([a-z]+))\.org$)', s) 
#つまり([0]([1]([2])([3])))いう事やろ?配列に入れてるなら?
0

1Answer

match は文字列先頭からのマッチです。
文字列途中からのマッチには search を使います。

>>> import re
>>> s = 'aaa@xxx.com bbb@yyy.net ccc@zzz.org'
>>> t = re.search(r'([a-z]+)\@([a-z]+)\.org$', s)
>>> t
<re.Match object; span=(24, 35), match='ccc@zzz.org'>
>>> t[0]
'ccc@zzz.org'
>>> t[1]
'ccc'
>>> t[2]
'zzz'
0Like

Comments

  1. @tattyan3

    Questioner

    ありがとうございます。

    import re
    
    s = 'aaa@xxx.com bbb@yyy.net bbb@xyz.com ccc@zzz.org'
    print("s=",s)
    t = re.findall(r'[a-z]+\@[a-z]+\.orgz', s) 
    # 
    print("t=",t)#orgでもないのに何でマッチするんや1文字列マッチ開始したとこから見とるんか^$いらんやろ
    # print したって、プログラム上、変数として使い物に使い物にならないのなぁ。何のためにやるんや
    #
    # なんか、match ができているのに、なんで、None が返ってくるんやろうか
    u=re.findall(r'[a-z]+@[a-z]+\.com', s)
    print("u=",u)
    # <re.Match object; span=(0, 11),aaa@xxx.com
    v =re.findall(r'(([a-z]+)@([a-z]+)\.(com))', s) #これは出来るが表示している文字列は入らない
    print("v=",v)
    print("print is=",re.findall(r'([a-z]+)@([a-z]+)\.(com)', s))
    # <re.Match object; span=(0, 11), match='aaa@xxx.com'>
    if len(t)==0 and len(u) == 0:
        print("None")
    elif len(u)>0:
        for mymach in u:
            print("maching=",mymach)
            my_mach_line =mymach.split('@')
            print("macing=",my_mach_line)
            my_mach =my_mach_line[1].split('.')
            print("mach is=",my_mach)
            my_cng = my_mach_line[0]+'@'+my_mach[0]+'.net.jp'
            print("my_cng=",my_cng)
            print("next")
    else:
        for mymach in t:
            print("maching=",mymach)
            my_mach_line =mymach.split('@')
            print("macing=",my_mach_line)
            my_mach =my_mach_line[1].split('.')
            print("mach is=",my_mach)
            my_cng = my_mach_line[0]+'@'+my_mach[0]+'.net.jp'
            print("my_cng=",my_cng)
            print("next")
    
    my_cng_str=re.sub(r'([a-z]+@[a-z]+\.)com','([1])+"net.jp"', s) #これは出来るが表示している文字列は入らない
    print("my_cng_str=",my_cng_str)
    
    exi
    
    
    PowerShell 7.4.1
    PS C:\xampp\htdocs\my_python>  & 'c:\Python\python.exe' 'c:\Users\tatty\.vscode\extensions\ms-python.debugpy-2024.0.0-win32-x64\bundled\libs\debugpy\adapter/../..\debugpy\launcher' '52804' '--' 'C:\xampp\htdocs\my_python\py_seiki.py' 
    s= aaa@xxx.com bbb@yyy.net bbb@xyz.com ccc@zzz.org
    t= []
    u= ['aaa@xxx.com', 'bbb@xyz.com']
    v= [('aaa@xxx.com', 'aaa', 'xxx', 'com'), ('bbb@xyz.com', 'bbb', 'xyz', 'com')]
    print is= [('aaa', 'xxx', 'com'), ('bbb', 'xyz', 'com')]
    maching= aaa@xxx.com
    macing= ['aaa', 'xxx.com']
    mach is= ['xxx', 'com']
    my_cng= aaa@xxx.net.jp
    next
    maching= bbb@xyz.com
    macing= ['bbb', 'xyz.com']
    mach is= ['xyz', 'com']
    my_cng= bbb@xyz.net.jp
    next
    my_cng_str= ([1])+"net.jp" bbb@yyy.net ([1])+"net.jp" ccc@zzz.org
    PS C:\xampp\htdocs\my_python> 
    

    next

    import re
    
    s = 'aaa@xxx.com bbb@yyy.net B.100.bb@xy.z.com ccc@zzz.org'
    print("s=",s)
    t = re.findall(r'[0-9a-zaA-Z\.]+@[a-z\.]+com', s) 
    print("t=",t)
    # u=re.findall(r'[0-9|a-z|A-Z|\.]+@[a-z\.]+comm', s) #.z.com=>.z.net.jp
    u=re.findall(r'[0-9a-zA-Z\.]+@[a-z\.]+coms', s)
    print("u=",u)
    v =re.findall(r'(([a-z]+)@([a-z]+)\.(com))', s)
    print("v=",v)
    print("print is=",re.findall(r'([a-z]+)@([a-z]+)\.(com)', s))
    #
    if len(t)==0 and len(u) == 0: #select t maching
        print("None")
    elif len(u)>0:
        for mymach in u:
            print("maching=",mymach)
            my_mach_line =mymach.split('@')
            print("macing=",my_mach_line)
            my_mach =my_mach_line[1].split('.')
            print("mach is=",my_mach)
            my_cng = my_mach_line[0]+'@'+my_mach[0]+'.net.jp'#これは@xy.z.com->@xy.net.jp 下を使っ使っている確定型のみ\.comのみ
            print("my_cng=",my_cng)
            print("next")
    else:
        for mymach in t: #it no @ it . script it is (t)
            print("maching=",mymach)
            my_mach_line =mymach.split('.') #it no @ it .
            print("macing=",my_mach_line)
            my_mach_line[len(my_mach_line )-1] = 'net.jp'
            print("macing=",my_mach_line)
            my_cng='.'.join(my_mach_line)
            print("my_cng=",my_cng)
            print("next")
    #いろいろためしている?
    #my_cng_str=re.sub(r'([a-z]+)@([a-z]+)\.(com)', my_cng, s) #re.sub(r'([a-z]+@[a-z]+\.)com',[1]+'net.jp', s)#簡単な例([1]) にするかは任せる。
    my_cng_str=re.sub(r'([a-z]+@[a-z]+\.)com','[1]net.jp', s) #これは出来るが表示している文字列は入らないtmp=([1]@[2].[3])=true(yes)=>([0])<=tmp[0]
    #(r'yes no yes no')my_cng_strに順番に入れて行っておく([1]net.jp) nomach ([1]net.jp) nomach) 要らないと要らないところは捨てる
    
    print("my_cng_str=",my_cng_str)
    
    exit()
    
  2. @tattyan3

    Questioner

    解決しました。

    import re
    
    s = 'aaa@xxx.com bbb@yyy.net B.100.bb@xy.z.com ccc@zzz.org'
    print("s=",s)
    t = re.findall(r'[0-9a-zaA-Z\.]+@[a-z\.]+com', s) 
    print("t=",t)
    u=re.findall(r'[0-9a-zA-Z\.]+@[a-z\.]+coms', s)
    print("u=",u)
    v =re.findall(r'(([a-z]+)@([a-z]+)\.(com))', s)
    print("v=",v)
    print("print is=",re.findall(r'([a-z]+)@([a-z]+)\.(com)', s))
    #
    if len(t)==0 and len(u) == 0:
        print("None")
    elif len(u)>0:
        for mymach in u:
            print("maching=",mymach)
            my_mach_line =mymach.split('@')
            print("macing=",my_mach_line)
            my_mach =my_mach_line[1].split('.')
            print("mach is=",my_mach)
            my_cng = my_mach_line[0]+'@'+my_mach[0]+'.net.jp'#これは@xy.z.com->@xy.net.jp 下を使っ使っている確定型のみ\.comのみ
            print("my_cng=",my_cng)
            print("next")
    else:
        for mymach in t:
            print("maching=",mymach)
            my_mach_line =mymach.split('.')
            print("macing=",my_mach_line)
            my_mach_line[len(my_mach_line )-1] = 'net.jp'
            print("macing=",my_mach_line)
            my_cng='.'.join(my_mach_line)
            print("my_cng=",my_cng)
            print("next")
    # 以下のように置換す
    my_cng_str=re.sub(r'([0-9a-zA-Z\.]+@[a-z\.]+\.)com',"\\1"+"net.jp", s) 
    print("my_cng_str=",my_cng_str)
    
    # URLのタグへの変換
    my_urls = "http://www.yahoo.com ,https://www.yahoo.com/あいう ai/ ,http://www.yahoo.co.jp\n,https://www.yahoo.co.jp"
    chngi_urls = re.sub(r'(https?://\S+|\.|!"|!\n)',"<a href\"\\1\">\\1</a>", my_urls)
    print("chngi_urls=",chngi_urls)
    
    exit()
    

    結果

    PowerShell 7.4.1
    PS C:\xampp\htdocs\my_python>  & 'c:\Python\python.exe' 'c:\Users\tatty\.vscode\extensions\ms-python.debugpy-2024.0.0-win32-x64\bundled\libs\debugpy\adapter/../..\debugpy\launcher' '60229' '--' 'C:\xampp\htdocs\my_python\py_seiki.py' 
    s= aaa@xxx.com bbb@yyy.net B.100.bb@xy.z.com ccc@zzz.org
    t= ['aaa@xxx.com', 'B.100.bb@xy.z.com']
    u= []
    v= [('aaa@xxx.com', 'aaa', 'xxx', 'com')]
    print is= [('aaa', 'xxx', 'com')]
    maching= aaa@xxx.com
    macing= ['aaa@xxx', 'com']
    macing= ['aaa@xxx', 'net.jp']
    my_cng= aaa@xxx.net.jp
    next
    maching= B.100.bb@xy.z.com
    macing= ['B', '100', 'bb@xy', 'z', 'com']
    macing= ['B', '100', 'bb@xy', 'z', 'net.jp']
    my_cng= B.100.bb@xy.z.net.jp
    next
    my_cng_str= aaa@xxx.net.jp bbb@yyy.net B.100.bb@xy.z.net.jp ccc@zzz.org
    chngi_urls= <a href"http://www.yahoo.com">http://www.yahoo.com</a> ,<a href"https://www.yahoo.com/あいう">https://www.yahoo.com/あいう</a> ai/ ,<a href"http://www.yahoo.co.jp">http://www.yahoo.co.jp</a>
    ,<a href"https://www.yahoo.co.jp">https://www.yahoo.co.jp</a>
    PS C:\xampp\htdocs\my_python> 
    

    お手数をお掛けしました。

Your answer might help someone💌