

以下の正規表現を用いて文章から文字列を抽出したいです．

[code]

    [\w-]+(\.[\w-]+)*
    
[/code]

この正規表現が正しいかをweb上で確認したところ以下の図のように文字を抽出できました．

  * 例  
[![画像の説明をここに入力](https://i.stack.imgur.com/S50SQ.png)](https://i.stack.imgur.com/S50SQ.png)

これを用いてPythonでも同様のことを行うとしたのですがうまくいきませんでいた．

[code]

    test_data = '検索したい文字列'
    result = re.findall(r'/*[\w-]+(\.[\w-]+)*', test_data)
    
[/code]

おそらくPythonコードの書き方に何か問題があるのだと思います．  
どこに問題があるのか教えていただきたいです．  
よろしくお願いします．


CC BY-SA 4.0
2021-06-13T13:58:05.657
77530
2021-06-13T17:03:23.660
2021-06-13T16:45:37.300
3060
44214
question
python 正規表現
web上ではうまく文字抽出できるのに，pythonで正規表現がうまくいかない


うーん、抜き出したいのは、

  * 1文字以上で
  * 1文字目は英数字か - で
  * 2文字目以降は英数字と - に加えて . もあり

なのではないですか？  
それなら`r'[\w-][\w\.-]*'`で良いかと。


CC BY-SA 4.0
2021-06-13T14:30:39.060
77531
2021-06-13T14:30:39.060
45045
77530
answer


JavaScript の正規表現エンジンと同様の結果を得るには non-capturing match group を使います。

[Regular Expression
Syntax](https://docs.python.org/3.8/library/re.html#regular-expression-syntax)

> `(?:...)`
>
> A non-capturing version of regular parentheses. Matches whatever regular
> expression is inside the parentheses, but the substring matched by the group
> cannot be retrieved after performing a match or referenced later in the
> pattern.
[code]

    import re
    
    test_data = '''
    ['Conflicting with version dependencies when running pip install',
    "Hi everyone, Having issues with version dependencies when running `pip install` on docker.
    However, when installing on my mac without docker and just virtualenv, works perfectly fine.
    **Mac OS** - macOS Mojave v10.14. **Python Version** - v3.7.3 **Docker Compose Version** -
    version 1.27.4, build 40524192 Here's the first error I got when running the docker-compose
    up I tried to loosen the `six` package from `six==1.10.0` to `six>=1.2,<=1.15.0` And throws
    a different error for requests package this time. Here's the error
    '''
    
    result = re.findall(r'[\w-]+(?:\.[\w-]+)*', test_data)
    print(result)
    
    ## 結果(適宜改行を入れています)
    ['Conflicting', 'with', 'version', 'dependencies', 'when', 'running', 'pip',
     'install', 'Hi', 'everyone', 'Having', 'issues', 'with', 'version', 'dependencies',
     'when', 'running', 'pip', 'install', 'on', 'docker', 'However', 'when', 'installing',
     'on', 'my', 'mac', 'without', 'docker', 'and', 'just', 'virtualenv', 'works',
     'perfectly', 'fine', 'Mac', 'OS', '-', 'macOS', 'Mojave', 'v10.14', 'Python',
     'Version', '-', 'v3.7.3', 'Docker', 'Compose', 'Version', '-', 'version', '1.27.4',
     'build', '40524192', 'Here', 's', 'the', 'first', 'error', 'I', 'got', 'when',
     'running', 'the', 'docker-compose', 'up', 'I', 'tried', 'to', 'loosen', 'the',
     'six', 'package', 'from', 'six', '1.10.0', 'to', 'six', '1.2', '1.15.0', 'And',
     'throws', 'a', 'different', 'error', 'for', 'requests', 'package', 'this', 'time',
     'Here', 's', 'the', 'error']
    
[/code]

その他に [re.finditer](https://docs.python.org/3.8/library/re.html#re.finditer)
を使う方法があります。

[code]

    result = [m.group(0) for m in re.finditer(r'[\w-]+(\.[\w-]+)*', test_data)]
    
[/code]


CC BY-SA 4.0
2021-06-13T16:37:57.007
77533
2021-06-13T17:03:23.660
2021-06-13T17:03:23.660
77530
answer