69694


Python3.7にてreの正規表現を利用しています。

.xlsxと.xlsの拡張子を持つ絶対ファイルパス文字列を特定の文字列データから抜き出したいです。  
そのために以下の正規表現を作成しました。

[code]

    \s.*(\.xlsx|\.xls)
    
[/code]

下記ページにて正規表現をお試し実行できるのですが、試しに動かしてみたところ意図した動きをしていました。  
[Regular Expression Test Page for
Python](http://www.regexplanet.com/advanced/python/index.html)  
[![お試し正規表現の結果](https://i.stack.imgur.com/bzrbq.png)](https://i.stack.imgur.com/bzrbq.png)

しかしながら、実際の環境で動かしてみると何一つとしてマッチしません。  
ソースコードは以下のようになっています。

[code]

    def grepFile(path, pattern_phrase):
        PATTERN_PHRASE = '.*(\.xlsx|\.xls)'
        try:
            grep_file = open(path, 'r')
            grep_file_content = grep_file.readlines()
            grep_file.close()
    
            for grep_txt_line in grep_file_content:
                result = re.match(PATTERN_PHRASE, grep_txt_line)
                if result:
                    # 適当な処理
                    # print(result.group())
    
        except Exception as e:
            messageWindow(LEVEL_ERROR, LEVEL_ERROR, e)
    
[/code]

一応、以下の正規表現のパターンを使用すれば.xlsxと.xlsは検出できますが、不必要な文字列までくっついてくるのであまり意味を成していません。

[code]

    .*(\.xlsx|\.xls)
    
[/code]

Pythonの正規表現を利用している方でこのような事象にあった方はおられますか？  
それとも、私の正規表現パターンがよろしくないのでしょうか。

2020/08/20 追記  
grep_fileの内容は以下の通りです。  
foobar.batはn個存在しており、その全てを正規表現検索することが目的です。  
foobar.batは単純にExcelファイルを特定の場所からローカルへコピーするだけのものです。  
バッチ特有の処理が記述されていますが、主に検索したい文字列は.xlsxや.xlsを持つファイル名（フルパス）です。

**foobar.bat**

[code]

    rem バッチ特有の何らかをごにょごにょする処理
    copy //△△/../../../../../foobar1.xlsx C://□□/../../printOut/foobar1.xlsx /y
    copy //××/../../../foobar2.xlsx C://□□/../../printOut/foobar2.xlsx /y
    
[/code]


CC BY-SA 4.0
2020-08-19T08:09:38.807
69693
2020-08-20T00:27:55.497
2020-08-20T00:27:55.497
3060
23015
question
python 正規表現
Pythonにおける正規表現 \sが効いていない？


`re.match` を `re.search` に変えると上手く動くと思います。

パターンが `\s` で始まっていて `re.match` を使った場合、行が空白で始まる場合だけマッチします。`re.search`
はパターンに当てはまる部分文字列を探します。


CC BY-SA 4.0
2020-08-19T08:45:21.693
69694
2020-08-19T08:45:21.693
3475
69693
answer