49512


いろいろと調べてみましたが、なかなか理解に苦しんでおります。

下記のような条件の場合の正規表現を教えてください。

対象ファイル名について  
1.n番目からm番目の文字列を抜き出す  
2.n番目からm番目の文字列を削除する  
3.最初からn番目までを抜き出す  
4.最後からn番目までを抜き出す

例えば  
"sample12345_abc_181022.txt"  
から、pathlibのstemを使ってパス要素の末尾から拡張子を除いたものを取得して  
"sample12345_abc_181022"  
から  
"sample_abc_181022"を取り出したい＝"12345"を取り除きたい  
先頭７番目から11番目を取り除きたい  
もしくは、  
先頭１番目から６番目と12番目から22番目を取り出して繋げて書き出す。


CC BY-SA 4.0
2018-10-21T08:51:43.967
49498
2018-10-22T05:42:14.937
2018-10-21T14:59:49.847
30391
30391
question
python pandas numpy
pythonでの正規表現について教えてください


以下のようなコードで概ね質問にある正規表現になると思います。例では、n = 3 m = 6
で文字列の位置は、0から数えるという条件にしています。なお、`str`はわかりやすいように数字にしていますが、英数大文字小文字特殊文字どれでも同じ結果になります。

[code]

    >>> import re
    >>> str = '0123456789'
    
[/code]

1.n番目からm番目の文字列を抜き出す

[code]

    >>> re.match(r'.{3}(.{4})', str).group(1)
    '3456'
    
[/code]

2.n番目からm番目の文字列を削除する

[code]

    >>> re.sub(r'(.{3})(.{4})', r'\g<1>', str)
    '012789'
    
[/code]

3.最初からn番目までを抜き出す

[code]

    >>> re.match(r'.{3}', str).group(0)
    '012'
    
[/code]

4.最後からn番目までを抜き出す

[code]

    >>> re.search(r'.{3}$', str).group(0)
    '789'
    
[/code]

`.`が任意の文字にマッチし、`.{3}`で任意の文字の3文字にマッチします。

今回のケースであれば、以下のようにスライスをするのが簡単ですが、文字の種別が必要になった時には対応が難しくなります。

[code]

    str[n:m+1]
    str[:n] + str[m+1]
    str[:n]
    str[-n:]
    
[/code]


CC BY-SA 4.0
2018-10-22T00:07:49.793
49512
2018-10-22T05:42:14.937
2018-10-22T05:42:14.937
15171
15171
49498
answer