0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【正規表現】よく使う正規表現(初心者用問題付き)

Posted at

はじめに

業務仲間とアイスブレイクとして正規表現について話したのでメモとして残します
また、練習問題も作成したので是非とも解いてください

先読み・後読み

正規表現 意味
(?=pattern) 肯定的先読み
(?!pattern) 否定的先読み
(?<=pattern) 肯定的後読み
(?<!pattern) 否定的後読み

※後読みが直前、先読みが直後です

具体例(肯定的先読み)

「チョコ(?=レート)」で検索

チョコレート    -- この行の「チョコ」のみがヒットする
チョコケーキ
チョコアイス
アイスチョコ
ミントチョコ

具体例(否定的先読み)

「チョコ(?!ケーキ)」で検索

チョコレート    -- この行の「チョコ」がヒットする
チョコケーキ
チョコアイス    -- この行の「チョコ」がヒットする
アイスチョコ    -- この行の「チョコ」がヒットする
ミントチョコ    -- この行の「チョコ」がヒットする

具体例(肯定的後読み)

(?<=アイス)チョコ

チョコレート
チョコケーキ
チョコアイス
アイスチョコ    -- この行の「チョコ」のみがヒットする
ミントチョコ

具体例(否定的後読み)

(?<!アイス)チョコ

チョコレート    -- この行の「チョコ」がヒットする
チョコケーキ    -- この行の「チョコ」がヒットする
チョコアイス    -- この行の「チョコ」がヒットする
アイスチョコ
ミントチョコ    -- この行の「チョコ」がヒットする

「?」で始まり
「<」が後読み
「=」が肯定
「!」が否定
と覚えています

エスケープシーケンス

  • ¥n: 改行(Line Feed)
  • ¥r: 復帰(Carriage Return) 行末から行頭に戻す復帰コード
    • windows環境では多くの場合「¥r¥n」で改行で
  • ¥d: 数字([0-9])
  • ¥w: 単語構成文字([A-Za-z0-9_])
  • ¥s: 空白文字([¥t¥n¥f¥r])

練習問題

置換前と置換後を提示しますので、どのような正規表現を記載したら実現できるかを答えてください

問1 行頭にある行番号等を消去したい

置換前.txt
1位 公務員
2位 看護師
3位 歌手・俳優・声優などの芸能人
4位 教師・教員
5位 絵を描く職業(漫画家・イラストレーター・アニメーター)
6位 保育士・幼稚園教諭
7位 カウンセラーや臨床心理士
8位 デザイナー(ファッション・インテリアなど)
9位 学者・研究者
10位 会社員
置換後.txt
公務員
看護師
歌手・俳優・声優などの芸能人
教師・教員
絵を描く職業(漫画家・イラストレーター・アニメーター)
保育士・幼稚園教諭
カウンセラーや臨床心理士
デザイナー(ファッション・インテリアなど)
学者・研究者
会社員
解答
置換前正規表現.txt
^¥d+位¥s
置換後正規表現.txt

問2 コンマ区切りになっている文を改行で分けたい

置換前.txt
中国語(北京語・普通話),英語,ヒンディー語,スペイン語,アラビア語,ベンガル語,ポルトガル語,ロシア語,日本語,イツ語,中国語(広東語),ジャワ語,韓国語(朝鮮語),フランス語
置換後.txt
中国語(北京語・普通話)
英語
ヒンディー語
スペイン語
アラビア語
ベンガル語
ポルトガル語
ロシア語
日本語
ドイツ語
中国語(広東語)
ジャワ語
韓国語(朝鮮語)
フランス語
解答
置換前正規表現.txt
,
置換後正規表現.txt
¥r¥n

問3 年月日の形式を変更したい

置換前.txt
2020年9月29日
2020年9月30日
2020年10月1日
2020年10月2日
置換後.txt
2020/9/29
2020/9/30
2020/10/1
2020/10/2
解答
置換前正規表現.txt
^(¥d{4})年(¥d{1,2})月(¥d{1,2})日$
置換後正規表現.txt
¥1/¥2/¥3

あとがき

先読み、後読みがとても便利なのでよく使っております。
おすすめの正規表現あれば教えてください。

たまによく使う正規表現

前後のトリミング

置換前正規表現.txt
^¥s*(.*?)¥s*$
置換後正規表現.txt
¥1
置換前.txt
1,a,100    
  2,b,200  	
    3,c,300
 4,d,400  	    
    5,e,500

※置換前.txtには全角スペースやタブも入っています。

置換後.txt
1,a,100
2,b,200
3,c,300
4,d,400
5,e,500
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?