TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
BASICの宿題はお前にまかせた
Perlについて
C言語なら俺に聞け 154
Vim vs Emacs Part2
将来的にPGになりたいんだが、やっぱCから?
JAVAってこんなことも出来ないの?
構造化ウェブプログラミング言語Dart2
懐かしのMS-DOSプログラミング ver.2
TopCoder
2chの荒らし報告の書式対応のプログラム

Regular Expression(正規表現) Part15


1 :2019/09/16 〜 最終レス :2020/05/29
Regular Expressionスレです。

質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。

前スレ
Regular Expression(正規表現) Part14
https://mevius.2ch.sc/test/read.cgi/tech/1489511075/


次スレは>>980宜しく
天ぷら等>>2以降

2 :
スルーされにくい質問のテンプレと例

●Regular Expressionの使用環境
Java1.5

●検索か置換か?
検索

●説明
各行の1番目のAまでを検索したい

●対象データ
ABCA
BCAA
CABA

●希望する結果
ABCA
^
BCAA
^^^
CABA
^^

※ ^ はアンダーラインだそうな ^^;

3 :
◆関連サイト
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm

詳説 正規表現
http://www.oreilly.co.jp/books/9784873113593/
正規表現クックブック
http://www.oreilly.co.jp/books/9784873114507/

正規表現プログラミングFAQ
http://capslockabcjp.kitunebi.com/faq.html

.NET Framework の正規表現 | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/regular-expressions
正規表現 - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions

鬼車
http://www.geocities.jp/kosako3/oniguruma/index_ja.html
鬼雲
https://github.com/k-takata/Onigmo
Boost.Regex 1.45.0 (日本語訳)
http://alpha.sourceforge.jp/devel/boost.regex_ja_1_45_0.pdf

秀丸: 複数行にまたがる検索について
http://homepage2.nifty.com/jr-kun/hidemaru_qa/4_regulr.html#RETURNS

サクラエディタ: 改行
http://d.hatena.ne.jp/myokoym/20101219/1292779058
※ サクラエディタでは複数行に渡る検索・置換は出来ません。

4 :
正規表現技術入門
https://gihyo.jp/book/2015/978-4-7741-7270-5

↑の著者の一人であり Onigmo の作者でもあるtakata先生のツイ
https://twitter.com/k_takata
(deleted an unsolicited ad)

5 :
>>1-2


6 :
●Regular Expressionの使用環境 
サクラエディタ bregoning.dll ver 3.06という記載があります

●検索か置換か? 
置換

●説明 
うしろに数字を付けたい。


というのを
/(^.*)/$1/ で置き換えると

になります(変わらない)。
これを、あ→あ00にするために
/(^.*)/$100/ とはできません。

$1等の直後に、数字を付け足すためにはどのように
表現したらよいか教えてください。

元の行の末尾に付け足すとは限らないので、
$1(実際はもっと多いのですが・・)の直後に数字を付け足す方法をお教えください。

7 :
>>6
/(^.*)/${1}00/
https://sakura-editor.github.io/help/HLP000089.html

8 :
>>7
ありがとうございます。
ヘルプを見るという基本がなってませんでした
もうしわけありません。

9 :
正規表現クロスワードパズル。めっちゃおもろいww
https://regexcrossword.com/

10 :
解き方がわかんねぇ・・・

https://regexcrossword.com/challenges/beginner/puzzles/1

[^SPEAK]+
HE|LL|O+

が交わるマスがなんで、Hになるんだ

11 :
クロスワードの基本ルールと同様に各マス1文字だが、通常と異なり各ラインが単語になるとは限らない
縦のラインを横ラインをそれぞれ検索対象のテキストと見做して両方がマッチすればOK
ちなみに1回で1ライン全てにマッチする必要は無くて複数回検索して全マスにマッチする形でも良いみたい

12 :
>>10
まず
EP|IP|EF
の列を埋めてみよう。

13 :
>>11
>>12

ありがと。わかったわ。

>縦のラインを横ラインをそれぞれ検索対象のテキストと見做して両方がマッチすればOK

クロスワードって考え方がスポーンと抜けてた。
枠外にある正規表現を、「縦のヒント」「横のヒント」としてみなすわけね。

for i in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z;
do echo $i | egrep "縦条件" | egrep "横条件" #縦横逆も可
done;

的な考え方をしてたわ・・・

14 :
全制覇した。疲れた。本来はもっとのんびり楽しむものだよな。

15 :
すげえ!高難易度のやつ歯が立たないわ

16 :
https://regexcrossword.com/playerpuzzles/59e565c95008d

これとか解けるのは人間ではないと思うわ

17 :
アカウント持ってないから login はできないけど
自分が解いた結果はまだ見られるな。
クッキーを削除したら見られなくなるんだろうか。

18 :
>>16
なんじゃこりゃwww
本末転倒だけどこれ数独ソルバーみたいにコンピューターに解かせられんの?

19 :
テキストエディタで試したら全27ラインマッチする状態になってるのに正解にならんなあ

20 :
どうもブラウザのせいだったようで、同じ内容を普段使ってないChromeで試したら正解扱いになった、よかった

作った人は凄いけど、解くのは1個1個できるところから埋め、条件を少しずつ絞りこんで行けば案外見た目ほど難しくはない
正規表現の可変長の書式の影響でクロスワードよりピクロスを解く感覚に似てる気がするのでその辺やってた人はちょっと有利かも
あと記憶力に余程の自身がなければ、ちょっと大きめに印刷して各マスに細かい条件を書きながらやったら大分楽になると思う

21 :
●Regular Expressionの使用環境
※テキスト(csv)を成型するという目的なので、なんでもいいです。
 フリー(ネットからDL可能)なものであれば環境を作ります。

●検索か置換か?
置換

●説明
csvファイルの第4フィールドに説明文的なものが入ってます。
ここに半角カンマが紛れています。これを全角文字(、)に置き換えたい。
第4フィールドにいくつカンマがあるかは不定です。(0の場合もあれば、2個、3個、場合によっては10個、それ以上など)
第4フィールド以外は種類は多いのですが特定の文字が入ります。また第4フィールド以外はカンマは入っていません。
各行のフィールド数は固定です。(実際は20フィールドあるのですが、省略のため5フィールドにしてます)

●対象データ
Field1,Field2,Field3,ここは説明文,Field5
Field1,Field2,Field3,説明文です,Field5
Field1,Field2,Field3,ここは説明文,ですよ,Field5
Field1,Field2,Field3,説明してる,フィールドですよ,Field5

●希望する結果
Field1,Field2,Field3,ここは説明文,Field5
Field1,Field2,Field3,説明文です,Field5
Field1,Field2,Field3,ここは説明文、ですよ,Field5
Field1,Field2,Field3,説明してる、フィールドですよ,Field5

よろしくお願いいたします。

22 :
3つ目の,以降から,field5までの間をキャプチャで良さそう。

23 :
>>21
perl -ne '($a,$b,$c)=m/^((?:[^,]+,){3})(.*[^,])((?:,[^,\n]+){1})$/; $b=~s/,/、/g; print "$a$b$c\n"' input.csv

先頭の三つはカンマの数を数えて取り出し
^((?:[^,]+,){3})
フィールド数は固定とのことなので末尾側もカンマの数で取り出せる
((?:,[^,\n]+){1})$
その間が置換対象
(.*[^,])

ということで数字(3 と 1)を調整すれば実際のデータにも適用できると思います

24 :
>>23
Python版
https://ideone.com/ApnsLv

25 :
質問を読んで直ぐにこれを書けるのなら速いけど
もし自分だったらあれをこうしてこれをこうしてと考えて試してる
間にテキストエディタとエクセルを行ったり来たりしながら
タブの挿入と置換と削除を繰り返した方が速いところが
悩ましいw

26 :
Ruby で、下のコードを、script.rb に書いて、
入力ファイル名を、input.csv とすると、

端末で、ruby script.rb input.csv と入力する。
つまり、ruby スクリプトファイル名 入力ファイル名

require 'csv'

# 引数はファイル名
CSV.filter( File.open( ARGV[ 0 ] ) ) do |row| # 1行ずつ処理する
row[ 3 ] = row[ 3 ].tr( ",", "、" ) # 列4
end

27 :
>>26
修正

tr ではなく、tr! で、直接レシーバー(文字列)を変更できる

>row[ 3 ] = row[ 3 ].tr( ",", "、" ) # 列4
row[ 3 ].tr!( ",", "、" ) # 列4

28 :
それ splice でできるんじゃね? と思ったのでやってみた。

perl -nF, -e 'splice( @F,3,0,join("、",splice( @F,3,@F-5+1))); print( join(",",@F));'

29 :
>>26
カンマでカラム分割してるからrow[3]にはカンマが含まれないよ

ARGF.each do |line|
line.match(/((?:.+?,){3})(.+)((?:,.+){1})/) do |match|
puts match[1] + match[2].gsub(",", "、") + match[3]
end
end

こういうのって力技で変換するよりも
CSV生成側でクウォートし直したほうがいいよね

30 :
手間をかけたくないなら、そんなフィールドは末尾に置くのが良い。
そうしておけば何を書こうと邪魔にならない。
いつかは手作業の限界を感じるかもしれないが、それを遅らせることはできる。

31 :
AIDS治療みたいなもんか

32 :
>>29
>>26 は、CSV モジュールを使っているから、
列をクォートする事で、列内に、カンマが存在できる!

入力ファイル
a,b,c,"あ,い,う",d

require 'csv'

# 引数は入力ファイル名
CSV.filter( File.open( ARGV[ 0 ] ) ) do |row| # 1行ずつ処理する
p row[ 3 ] #=> "あ,い,う"
row[ 3 ].tr!( ",", "、" ) # 列4
end

出力
a,b,c,あ、い、う,d

33 :
>>32
いやそりゃクウォートしてれば問題ないよ

a,b,c,あ,い,う,d

a,b,c,"あ,い,う",d

変換する処理が必要なわけで
そこができてないから困ってるんじゃないのかな

34 :
クォートしてなかったら、そもそも、CSV にならない!

列内に、カンマが含められないから、列数も変動する

35 :
それがわかってるから変形したいんじゃん。

36 :
バグのほとんどが設計段階で生じる、典型的な例かw

バグを設計段階で修正せず、実装段階で修正しようとするから、
ますますダメになるという例w

SE・上流工程が馬鹿だと、こういうのが多いw
Ruby などで実装した事がないからだろうw

ダメな事をやる香具師が、あまりにも多いw

37 :
なにこの人
要望・仕様を満たせないバグありのプログラムを書いておいて
それを指摘されたら「設計が悪い」と逆ギレしだしたよ
Ruby使う人ってこんなしょうもないおっさんに成り下がるのか

38 :
>>21
Vim
:%s/^\%([^,]*,\)\{3\}\zs\(.*\)\%(\%(,[^,\n]*\)\{1\}$\)\@=/\=substitute(submatch(0), ',', '、', 'g')/

Emacs
M-x query-replace-regexp
正規表現:
^\(\(?:[^,]*,\)\{3\}\)\(.*\)\(\(?:,[^,
]*\)\{1\}\)$
置換:
\1\,(replace-regexp-in-string "," "、" \2)\3

正規表現は>>23とほぼ同じだけど、空のフィールドに対応するよう + をすべて * に変更した
「第4フィールド」の内容がカンマだけの場合にも対応 (.*[^,]) → (.*)

39 :
>>16
お題スレの人が総当たりソルバー作ってくれた
https://mevius.2ch.sc/test/read.cgi/tech/1564310397/757

40 :
●Regular Expressionの使用環境
サクラエディタ bregoning.dll ver 4.12

●検索か置換か?
置換

●説明
をふくむ行(複数)を削除

●対象データ
A.jpg
B.jpg
C.jpg

●希望する結果
A.jpg

Bだけを削除するなら^.*B.*\nってわかるんですけど
B、Cを削除する方法がわかりません
誰か教えてください よろしくお願いします

41 :
>>40
いまいちやりたいことがはっきりしないが、
Aのみ残したなら、^[^AA].*?jpg¥n
BCのみ消したいなら、^[BC].*?jpg¥n

Aのみ全角なのは故意なのか?

42 :
を含む行を削除
でググればすぐに見付かるんだが

ttps://yanohirota.com/regex-delete-row/
キーワードを含む行(複数指定) ^.*(キーワード1|キーワード2).*$(\r\n|\r|\n)?

43 :
●Regular Expressionの使用環境
Mery
●検索か置換か?
置換
●説明
パターンにマッチする行までの全ての行をキャプチャしたい
●対象データ
20191001
吾輩は猫である
名前はまだ無い
……
20191002
親譲りの無鉄砲で
子供の頃から
損ばかりしている
……

●希望する結果
20191001[Tab]"吾輩は猫である
名前はまだ無い
……"
[改行]
20191002[Tab]"親譲りの無鉄砲で
子供の頃から
損ばかりしている
……"
日付と本文が交互に現れるテキストを日付と本文とに分けてキャプチャして置換したいのですが、上手く行きません。
最短一致を使用すると本文が一行しかキャプチャできないし、最長一致ですと最後の日付までの全行がキャプチャされてしまいます。
どうかご教示下さい。

44 :
>43

検索
(^[0-9]{8})\n

置換
\n$1\t

45 :
Ruby では、

text = <<"EOT"
20191001

20191002


EOT

# キャプチャー部分の、#{ $1 } は、8桁の数字
p res = text.gsub( /^(\d{8})\n/ ) { "\n#{ $1 }\t" }
print res

出力
[空行]
20191001[Tab]あ
[空行]
20191002[Tab]い


46 :
>>44
ご回答ありがとうございます。
すみません。本文部分を"で括りたくて、数字8桁に挟まれた部分にマッチさせたいのです。

47 :
>>46
CotEditorでドットが改行に一致する状態なら以下でできる
(^¥d{8})(.*(?=¥n¥d{8})|.*(?=$))

Meryは知らん

48 :
一応置換はこれ
$1¥t"$2"

49 :
(^\d{8})\n((?~^\d{8}))$
\1\t"\2"
最後の行が改行されてると"がズレるからそこだけ手作業

50 :
negative lookahead
https://regex101.com/r/DBWwcI/1

最下行に日付+改行を付け足せばORが一つ減って少し読みやすい
https://regex101.com/r/R3MQz7/1

51 :
>>43
^([0-9]{8})\n((?:(?!\n[0-9]{8}\n)[\S\s])+)

52 :
(?m)(^[0-9]{8}$)\n(.*?)(?=\n[0-9]{8}$|\Z)
(?m)(^[0-9]{8}$)\n(.*?)(?=\n[0-9]{8}$|\z)

$1\t"$2"

53 :
>>50
negative lookaheadとか書きつつ全然negativeじゃなかったわ

54 :
皆様ありがとうございます
最短一致と先読みを組み合わせて
(\d{8})((?:.*\n)*?)(?=\d{8})
のような感じでマッチしました
単に.*だけだと行末までで止まってしまうので明示的に.*\nの繰り返しと指定しないといけなかったようです

55 :
/(A|B*|C+|D?|E?|)+/ は /[A-E]*/ と同じなんだろうか。

56 :
=を含まない行を検索できる表現方法は?

57 :
>>56
^[^=]*$

58 :
PCRE2 Version 10.34 21-November-2019
https://www.pcre.org/

59 :
今でもアクティブに更新してるのってPCREの他はre2と鬼車系くらいなのかな
昔はライブラリの話も結構してた気がするけど

60 :
Hyperscan

61 :
テキストエディタで見えないけど何かがある状態
MacのBBEditだと逆さまの赤い「?」が表示される状態なんですけど
こういうのを正規表現で捕まえる事って出来ないですか?

62 :
否定で出来ない?

63 :
>>62
色々やってみたけど
非単語構成文字に含まれてしまい上手くこれだけ抽出出来ないです
一体こいつは何者なんだろう? もうちょい悩んでみます

64 :
そういうときはバイナリエディタで開いて該当部の文字コード引きなよ。

65 :
ありがとうです
\x{7F}
でいけました

66 :
ウムラウトなどのアクセント付きアルファベットにのみ一致させる正規表現をお教えください。

67 :
正規表現だけではまだできないんじゃないかな?

一般的には各言語が持ってるUnicodeの正規化機能を使って検索対象を基底文字+結合文字の形に正規化してから、結合文字を検索する

68 :
日本語なら、NKF というライブラリがあるように、
ウムラウトなら、その国のライブラリがあるかも知れない

知らないけど

まあ、日本人に聞いても、ムダだと思うw
使っている国の人に、聞いた方がよい

69 :
cpanライブラリの中に一般的な正規表現集めたものがあるから
その中にあるかもね

70 :
あるいは文字コードで標準ラテンのz(U+007A)よりあとを全て拾うように範囲指定するとか。

71 :
>>66
数は知れてるんだから普通に[ÄäÏï …]ってやればいいんじゃね?

72 :
サクラエディタの正規表現ライブラリbregonig with Onigmoの場合、大文字小文字区別なしでßや\x{00DF}がssにヒットするので困る。

73 :
>>71
見た目が同じäでも文字コードの表現は複数ある
文字の種類も含めてこれで全部といえる集合を作れるならそれでいける
日本語で濁音が含まれる文字にのみ一致させる正規表現を求めてるのと似てる

74 :
https://i.imgur.com/tclLTCk.png

75 :
[=a=]
equivalence class

76 :
●Regular Expressionの使用環境
鬼雲6.2.0 &Mery
●検索か置換か?
検索
●説明
行中の1個目の=にだけマッチさせたい
意味合いとしては
(?<=^[^=\n]+)=
なんだけど
>戻り読みの式は固定文字長でなければならない。
>しかし、最上位の選択子だけは異なった文字長が許される。
だそうで+はダメみたい
(?<=^(?~=))=
戻り読みの中に非包含もダメだった

(?<=^[^=\n]|^[^=\n]{2}|^[^=\n]{3}| .... |^[^=\n]{1000})=
とかすれば無理矢理出来そうだけどもっとスマートな書き方無いかな?

77 :
^.*?\K=

78 :
>>77
ありがとう
速っ。数日悩んであれこれ試してたのが嘘みたいなあっさり回答w
\Kとか意味分かってなかったけどこうやって使うんですね
重ね重ねありがとうございました

79 :
>>75
それだとウムラウトついてないのも引っかかるよね

80 :
\K
いいなそれと思ったけど自分の環境では使えなかった残念

81 :
>固定文字長で >最上位の選択子だけは異なった文字長
これはこういう意味かな
(?<=^[^=\n]{1,1000})=

82 :
鬼車のは (?<=ab|cd) だけじゃなく (?<=ab|cde) みたいなのも可ってことだったと思う

戻り読みを本当に後戻りしながらマッチングしてる実装ってほとんどなくて
大抵は文字列を一旦n文字分巻き戻して先読み相当の処理をするって感じになってるんで
パターンコンパイル時に「n文字分」が確定できない表現は弾かれる

83 :
グレップ坊や というソフト使ってますが
正規表現で、データだけ検索 データーを除外したい
どいう表記になりますか?

84 :
データを表現する正規表現が基本
除外については反転オプションないの?
本家 grep には -v で反転する

85 :
データ(?!ー)
データ(?=[^ー])
否定先読みか先読みが使えるならこれで出来る
独自のものだと適切なエスケープが必要かも
VB6ランタイム必要とあるからたぶんVBだろうけど

86 :
下のほうで行けました

87 :
●Regular Expressionの使用環境
sed-4.7-x64.exe
(Gnu sed4.7のwindows版 https://github.com/mbuilov/sed-windows)
Windows 8.1(64)のPowerShellで実行

●検索か置換か?
置換(削除)

●説明
行頭から6文字目を削除して、行頭から2文字目の後に一文字挿入したい
●対象データ
1229日 1400
1230月 1500
1231火 1500

●希望する結果
12/29日1400
12/30月1500
12/31火1500

sed.exe -e "s/(?<=^.{5})\s//" .\ファイル.txt
としたら6文字目のスペースが削除されるかと思ったけどうまくいかない
ファイルはUTF-8で改行はCRLFです

88 :
>>87
> うまくいかない
なぜどううまくいかないのかを書かないの?

89 :
何も削除されずに元のファイルがそのままです。
エラー表示等はないです。

90 :
^(.{2})(.{3}).(.*)$
$1/$2$3

91 :
sed -i ?

92 :
sed -E "s/^(..)(...)\s(.*)/\1\/\2\3/" .\ファイル.txt

93 :
●Regular Expressionの使用環境
正規表現の本・テキストで疑問に思った部分ですので特に環境は無いです 

●対象データ
太郎はテニス部のキャプテンです。
太郎はサッカー部のキャプテンです。
太郎は野球部のキャプテンです。
太郎はバスケ部のキャプテンです。

●検索か置換か?
検索

●希望する結果
太郎はテニス部のキャプテンです。
太郎はサッカー部のキャプテンです。
太郎は野球部のキャプテンです。

●説明
通常の 太郎は(テニス|野球|サッカー)部のキャプテンです では無く
バスケ という単語を使い正規表現を作りたいのです
()を使った場合(使わなくても バスケ を用いた方法であれば良い)
の否定文・除くの書き方がわかりません
^ を使っってみましたが上手く行きませでした

太郎は(^バスケ)部のキャプテンです。 ・・ダメ
太郎は^(バスケ)部のキャプテンです。 ・・ダメ  
太郎は(\^バスケ)部のキャプテンです。 ・・ダメ

バスケ を使った場合どの様に記述すれば良いのでしょうか?

94 :
否定は、(?!文字列)
でも、太郎は(?!バスケ)部の、とは書けないよ
「太郎は」に続く「バスケでない任意の1文字以上の文字列」部のキャプテンという風に考えてみてくれ

95 :
>>93
正規表現だけでは否定を完全実現できない。
だからこそ、例えばgrepには -vオプションがある。いずれのライブラリやアプリも正規表現とは別の方法で否定を実現している。

96 :
太郎は(?!バスケ).*部のキャプテンです。
太郎は(?!バスケ).*
(?!.*バスケ)太郎は.*部のキャプテンです。
(?!.*バスケ)太郎.*
(?!.*バスケ).*

97 :
鬼雲 非包含
^(?~バスケ|\n)$

98 :
太郎は(?!バスケ).*部のキャプテンです。
にて出来ましたが
(?!バスケ) の扱いを .* でさらに処理しなきゃいけないのは全く思いつかないです
今回のを参考に今後も学習してみます

皆様 >>94->>97 ありがとうございました

99 :
>>98
https://abicky.net/2010/05/30/135112/

100 :
^(?!.*バスケ)(?=.*キャプテン)(?=.*太郎).*


100〜のスレッドの続きを読む
Ruby 初心者スレッド Part 65
結局開発で最も大切なのはテーブルの正規化と制約
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part19
Flutterやろうよ!!!
今までに見たソースコードで一番感動したのは deux
Pythonのお勉強 Part61
OpenMPプログラミング
[RPA]PC自動化技術総合スレ[効率化] Part.6
構造化ウェブプログラミング言語Dart2
インデントを強制しても綺麗なコードにはなりません
--------------------
IPアドレスを隠す方法って?
けものフレンズ【2】519人目
はぐれ刑事純情派5
【星に】40代で無職 1242日目【願いを】彡☆
NTTファシリティーズ5
土日でいくら負けた???
仕事人 鶴見五郎を讃えよう
【バーチャルYoutuber】にじさんじアンチスレ1360【GREE応援スレ】
【Funk】 ファンク総合10【ドス黒】
CD未収録曲・レア音源・音源の無い曲などを語るスレ
NHK人形劇三国志 第五回
開業5年未満or45歳以下の税理士集合99
【高知】豪雨のさなか北海道で競馬観戦 高知市総務部長を更迭 市上下水道局理事へ異動
***番長スレ***【180th】
深作眼科 院長 深作 秀春
次スレ
【リアル】トイザらス part98【ネット】
☆★関東の美大VS関西の美大☆☆
【司馬遼太郎】 功名が辻 其の3
某団ヲタヲチ8
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼