

tpye を見ると `<class 'pandas.core.series.Series'>` というデータになっています。  
このデータに含まれる文字列検索をしたいと思っています。

[code]

    match = Series_data[Series_data == "F:\\"]
    
[/code]

とやると、目的の結果が得られています。（今のところそう見える）

実際には、ドライブ名は不定でFのときもあればそのほかのアルファベットのときもあります。  
なので、`[]` の中を正規表現で書けないかと思っているのですが、

[code]

    match = Series_data[re.search(':\\', Series_data )]
    
[/code]

どうもこれではダメのようで、以下のようなメッセージが出ます。

[code]

    raise error("bad escape (end of pattern)",
    re.error: bad escape (end of pattern) at position 1
    
[/code]

正規表現の書式が間違っているのか。そもそも正規表現が使えないのか、区別がつきません。

よろしくお願いします。

===========================================================================

回答をくださった皆さんありがとうございました。私に理解できそうな  
match = Series_data[ Series_data.str.contains(r':\\\') ]  
を試してみたところ、動作を確認できました。  
rをつけているのに、r':\\\'（\ が２つ必要）と書かないとエラーが出るのはちょっと気持ち悪いですが、とりあえず動きました。  
r':\'と書いたときに、  
SyntaxError: EOL while scanning string literal  
というエラーが出ます。


CC BY-SA 4.0
2021-02-07T05:12:50.580
73840
2021-02-07T10:46:58.810
2021-02-07T10:46:58.810
43160
question
python python3 pandas 正規表現
Python 3.8.5 seriesでの正規表現を用いた文字列検索について


ファイルパスを表現するなら、`\` の代わりに `/` を使ってしまうのが手っ取り早いかもしれません。

[code]

    match = Series_data[re.search(':/', Series_data )]
    
[/code]


CC BY-SA 4.0
2021-02-07T05:54:36.320
73841
2021-02-07T05:54:36.320
3060
73840
answer


Pandasには Pandas用の `in` とか 正規表現とかあります。  
普通の？ Pythonと少し異なる部分というか, そういうのはほかの部分にも見られます。

[code]

    s1 = pd.Series(['aaa','bbb', 'abb','ccc'])
    s1[s1.str.match('.bb')]
    # 1    bbb
    # 2    abb
    # dtype: object
    
    s1[s1.str.contains('bb')]   # regex=False などオプションあり
    # 1    bbb
    # 2    abb
    # dtype: object
    
[/code]

参考:  
<https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.Series.str.contains.html>


CC BY-SA 4.0
2021-02-07T06:26:45.100
73843
2021-02-07T06:32:03.563
2021-02-07T06:32:03.563
43025
43025
73840
answer


`re.search` を使うのでしたら、[pandas.Series.apply](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.Series.apply.html#pandas-series-apply)
で処理する方法があります。

[code]

    import pandas as pd
    import re
    
    Series_data = pd.Series([
      'F:\\Documents\\Newsletters\\Summer2018.pdf',
      'C:\\Projects\\apilibrary\\apilibrary.sln',
      '\\Windows\\Python.exe',
      'data_path'
    ])
    
    >>> Series_data[Series_data.apply(lambda x: bool(re.search(r':\\', x)))]
    0    F:\Documents\Newsletters\Summer2018.pdf
    1      C:\Projects\apilibrary\apilibrary.sln
    dtype: object
    
[/code]

`re.search`
ではなく、[os.path.splitdrive](https://docs.python.org/3.8/library/os.path.html#os.path.splitdrive)
を使う方法もあります(Windows 以外の OS では `ntpath.splitdrive`)。

[code]

    import pandas as pd
    import ntpath
    
    >>> Series_data[Series_data.apply(lambda x: bool(ntpath.splitdrive(x)[0]))]
    0    F:\Documents\Newsletters\Summer2018.pdf
    1    C:\Projects\apilibrary\apilibrary.sln
    
[/code]


CC BY-SA 4.0
2021-02-07T07:47:44.103
73844
2021-02-07T07:47:44.103
73840
answer