Regular Expression(正規表現) Part15

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2019/09/16(月) 22:25:11.87ID:enU8we0d
Regular Expressionスレです。

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

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


次スレは>>980宜しく
天ぷら等>>2以降
2020/07/29(水) 01:26:58.01ID:W2ZwK0DF
/<img[^>]+test\.jpg[^>]+>/g

JavaScript では、これで両方に一致する。
[^>]+ で、> 以外の文字を、1文字以上。
g で、すべての箇所に一致する

test.jpg だと、. は任意の1文字を表すから、意味が異なる。
ドットという文字に一致させるには、\. とエスケープが必要
2020/07/29(水) 01:58:17.28ID:yfMsWFOq
aタグ含めてマッチさせたいんでね?
それでも単純に|で繋げば済む話だと思うけど
2020/07/29(水) 03:04:25.73ID:Qbap9rXN
あってもなくてもいいものは末尾に?を付ければいいよ
((<a [^>]++>)?(?:<img[^>]+test\.jpg[^>]+>)(</a>)?)
2020/07/29(水) 05:46:17.91ID:z6Fnx3oM
>>9
これ面白いな。プログラミング授業に採用すべき。
330デフォルトの名無しさん
垢版 |
2020/07/29(水) 11:18:17.76ID:RU44SEhN
>>326
ありがとうございます!
[^>]+ って発想がありませんでした・・。

>>328
ありがとうございます。
++ のところは一つですよね?

こんな感じをベースにやってみようと思います。
https://regexper.com/#%7C%28%28%3Ca%20%5B%5E%3E%5D%2B%3E%29%3F%28%3F%3A%3Cimg%5B%5E%3E%5D%2Btest%5C.jpg%5B%5E%3E%5D%2B%3E%29%28%3C%5C%2Fa%3E%29%3F%29%7C
2020/07/29(水) 11:23:00.16ID:d73w3j+s
>>325
こういうの正規表現じゃなくcss selectorやxpath使った方が簡単だよ
2020/07/29(水) 14:14:44.18ID:8IMt+CxM
> リンクに囲まれた test.jpg または、画像だけののどちらかがあって
> /(^.*)(<a href=".*?>\n*<img .*?test.jpg.*?>\n*<\/a>)(.*$)/s
> /(^.*)(<img .*?test.jpg.*?>)(.*$)/s

^(?=.*test\.jpg).++$
こういう事では?
333325
垢版 |
2020/07/29(水) 14:47:56.12ID:RU44SEhN
>>331
ありがとうございます。
たしかにその2つのほうがphpソースとしては分かりやすくなりそうですね。
2020/07/31(金) 01:03:19.74ID:sgil418T
>>329
前半はいいけど、後半がきつい
総当たりで力技ぐらいしか思いつかんわ・・・
335デフォルトの名無しさん
垢版 |
2020/08/01(土) 06:04:54.43ID:Wz14ZhNZ
cssなんですが、
margin:10px;padding:10px;border:1px solid red;backgroun-color:red;font-size:16px;
というものがあったとして、正規表現でborderのプロパティと内容だけを削除できないでしょうか?
欲しい結果どす
margin:10px;padding:10px;backgroun-color:red;font-size:16px;

ちなみにborderの値は
1px red solidの場合もあれば
solid 1px redの場合もあります

つまり、borderプロパティに不随する値を消したいのです(´・ω・`)
2020/08/01(土) 06:13:27.50ID:xL8Di7oE
〜; か、;〜; の、〜の中に、border という文字列が、あれば良いのか?
337デフォルトの名無しさん
垢版 |
2020/08/01(土) 06:32:02.40ID:Wz14ZhNZ
どういうことですか?
borderプロパティとその値を削除したい感じです
border(プロパティ):red 1px solid(値);
2020/08/01(土) 06:38:27.91ID:hnL660kY
border[^;\n]++;
2020/08/01(土) 06:52:53.24ID:GqyTFtiM
\rも入れといたほうがいいだろ
2020/08/01(土) 06:59:35.99ID:GqyTFtiM
あとborder-color:〜とかも消えちゃうね
2020/08/01(土) 07:21:39.09ID:GqyTFtiM
あとプロパティじゃなくて値やコメントにborderって入る可能性が無いかな?
\bborder\s*:[^;}\r\n]++;?
ぐらいがいいのではないかな
これでもxx-borderとかプロパティがあったり?(無いだろうけど)
、また値を改行されて書かれたりしたらダメなんだが
2020/08/01(土) 07:38:14.81ID:GqyTFtiM
処理系がかかれてないので++がダメだったら+に代えるように
343デフォルトの名無しさん
垢版 |
2020/08/01(土) 09:01:52.60ID:Wz14ZhNZ
すみません
meryです
344デフォルトの名無しさん
垢版 |
2020/08/01(土) 12:04:03.32ID:kkqe9vdZ
border(-[a-z]+)?:[^;]+;
345デフォルトの名無しさん
垢版 |
2020/08/01(土) 18:09:27.98ID:Wz14ZhNZ
ありがとうございます
できましたが、解説サイトありませんか?
記号がヒットしないもんで、、、
2020/08/01(土) 18:40:27.24ID:hnL660kY
https://github.com/k-takata/Onigmo/blob/master/doc/RE.ja
347デフォルトの名無しさん
垢版 |
2020/08/01(土) 19:21:49.80ID:kkqe9vdZ
(自分の投稿分だけ)
[]は[]内に挙げた任意の1文字
+は直前の文字だけで構成される文字列,*は0文字以上、+は1文字以上
つまり[a-z]+はa-zの範囲の文字だけで構成される長さ1以上の任意の文字列
?は直前の文字(列)がないものも対象(あってもなくてもいいということになる)

[]内先頭の^は否定
つまり[^;]は;以外の任意の文字

まとめると:の前は
border, border-width等borderファミリーまとめて対象にしている
:の後は:直後〜最初の;までが対象

>>344では:以前にスペースがあると対象にならない
348デフォルトの名無しさん
垢版 |
2020/08/01(土) 22:21:06.56ID:Wz14ZhNZ
丁寧にありがとうございます。難しいですね。
border(-[a-z]+)?:の部分はなぜグループ化する必要があるんでしょうか?
2020/08/01(土) 22:43:25.14ID:LBbA9Kf+
>>348
それは>>347
> まとめると:の前は
> border, border-width等borderファミリーまとめて対象にしている

border:を対象にするために
border(-[a-z]+)?:というborder《【頭に-付いたa-z任意文字列1文字以上】があってもなくても》:指定になってる

>>347のいってる空白云々はborder :のようにrと:の間に空白あるとマッチしないという意

元cssの書き方次第で漏れるからあまり向いてるとは言えない気がする
空白を気にして\s?や[:blank:]?を間に入れ込むのも精神的にツラい
その場限りならいいけど
350デフォルトの名無しさん
垢版 |
2020/08/01(土) 22:57:20.65ID:Wz14ZhNZ
borderとborder-styleなどを対象にする場合、括弧を使うことで不足分を補うというイメージでしょうか?
borderとborder-styleという指定になってるんですね
2020/08/01(土) 23:05:44.88ID:LBbA9Kf+
>>350
border(-[a-z]+)?: の ? をどこに効かせるか
border-([a-z]+)?: だと - が必須になる(- に ?が効かない)ので border: にマッチしない(border-abcdef: にはマッチする)

正規表現 入門 でググってそれ見ながら ↑のパズルで遊んでみたら?
2020/08/01(土) 23:08:11.58ID:oWJPeiSz
border-radiusも忘れないであげてください...
2020/08/01(土) 23:12:41.55ID:+HD/AULr
説明が下手だと良く言われるでしょ?
笑えるくらいグダグダなのなw
2020/08/01(土) 23:38:46.09ID:o0eKxhHR
>>353
はいどうぞw
355デフォルトの名無しさん
垢版 |
2020/08/02(日) 04:53:04.96ID:Q2aVGOnZ
Mery(鬼雲の仕様?)なら
border\s*(-[a-z]+)?:[^;]+;
で:前の改行や空白文字も対象にしてくれるけど
エンジンによっては対象にならないし
可能なパターン全てに対応させようと思ったら正規表現メモになってしまう(相当面倒だということ)

どーでもいいけど
[-a-z]か(-[a-z]+)*にした方が良かったか
border-なんとか-かんとか
みたいなのもある?
356デフォルトの名無しさん
垢版 |
2020/08/02(日) 07:34:01.59ID:WI1GGX9r
最小一致のやり方を教えて下さい
<h1>aaa</h1><h1>aaa</h1>
最初のh1要素だけ取り出すことはできないでしょうか?

<h1>(*?)</h1>

これではだめです。

>>351
ありがとう
手を動かします
2020/08/02(日) 07:46:47.76ID:afjdMLlX
<h1>[^>]+h1>

[^>]+ は、> 以外の文字が、1文字以上
2020/08/02(日) 08:08:51.02ID:7mfh4V7b
<h1>(?>.*?</h1>)
<h1>(?>(?s).*?</h1>)
<h1>(?~</h1>)</h1>

<h1><a id="abc">abc</a>
</h1>
2020/08/02(日) 08:08:54.84ID:SCuZm8dn
^.*?<h1>\K.*?(?=</h1>)
2020/08/02(日) 08:16:49.14ID:piHYqXfk
(?~</?+h1>)(?=</h1>)
2020/08/02(日) 08:18:05.24ID:1ddBclsD
あ、ダメだこれ>>360
362デフォルトの名無しさん
垢版 |
2020/08/02(日) 10:46:18.27ID:WI1GGX9r
>>357,358,359
全部だめでした
ちなみにmeryです
いつもいい忘れます
ごめんなさい
363デフォルトの名無しさん
垢版 |
2020/08/02(日) 10:54:32.92ID:WI1GGX9r
>>357
これでいけました
しかし順番にマッチするんですね
364デフォルトの名無しさん
垢版 |
2020/08/02(日) 10:55:57.37ID:WI1GGX9r
順番に置き換えていくならいいですが、全て置き換えを行う場合
>>357だと出来ないですね
2020/08/02(日) 11:08:50.52ID:SCuZm8dn
削除
^.*?\K<h1>.*?</h1>(.*)
\1

ABCに置換
ABC\1
2020/08/03(月) 01:53:48.18ID:p6SF3tC+
すべてにマッチする、オプションは無いの?
367デフォルトの名無しさん
垢版 |
2020/08/03(月) 03:15:13.61ID:/ZQCQ5dx
>>365
ありがとう
むずかしい
368デフォルトの名無しさん
垢版 |
2020/08/05(水) 13:11:50.02ID:zXYtyxDC
●Regular Expressionの使用環境
サクラエディタ

●検索か置換か?
置換

●説明
空白を除去するのに\sで検索してますが
アルファベットの文字間では空白を残したい

●対象データ
ジャッキー チェン:Jackie Chan
●希望する結果
ジャッキーチェン:Jackie Chan
2020/08/05(水) 14:03:13.77ID:xp5DSzK/
スペースの直前直後が[a-zA-Z]ならマッチせず
それ以外ならマッチするという正規表現でいいのかな?
もうちょっと仕様を詰めたほうがいい気がする

John Paul IIの2つ目のスペースは削除?
George W. Bushの2つ目のスペースは削除?
2020/08/05(水) 14:03:44.33ID:UoH2gIZd
(?<=[^A-Za-z])\s(?=[^A-Za-z])|(?<=[^A-Za-z])\s(?=[A-Za-z])|(?<=[A-Za-z])\s(?=[^A-Za-z])
371デフォルトの名無しさん
垢版 |
2020/08/05(水) 16:38:08.92ID:zXYtyxDC
>>369
スペースの前後ともアルファベットならマッチせず、それ以外ならマッチするです。
その他の条件はありません。ちなみに行頭と行末のスペースにはマッチさせたいです。

>>370
ありがとうございます。行頭が残るようですが希望のことができました。
2020/08/05(水) 16:57:46.08ID:UoH2gIZd
>>371
^\s++|\s++$|(?<=[^A-Za-z])\s(?=[^A-Za-z])|(?<=[^A-Za-z])\s(?=[A-Za-z])|(?<=[A-Za-z])\s(?=[^A-Za-z])
2020/08/05(水) 17:13:59.30ID:xp5DSzK/
ORでは1つで良いような

(?<![a-zA-Z])¥s|¥s(?![a-zA-Z])
2020/08/05(水) 20:14:19.67ID:TJuHD2ix
ゼロ個でも
\s(?!(?<=[A-Za-z].)(?=[A-Za-z]))
2020/08/05(水) 21:50:35.87ID:xp5DSzK/
>>374
へぇーー
速度的にも有利っぽいしこのパターン覚えとくわ
2020/08/06(木) 11:27:45.13ID:mqEUv0B4
成り立ってるそれ?
2020/08/06(木) 11:59:29.23ID:04L3Tvl2
\s(?!(?<=[A-Za-z].)[A-Za-z])
肯定先読み要らないよね。ある方が見やすい気がしなくもないけど
2020/08/06(木) 16:39:38.24ID:LCybI18e
374の「選択子がゼロ個」と「集合の否定」の話じゃなければアサーションを入れ子にする必要もないのですよ
\s(?>(?![A-Za-z])|(?<![A-Za-z].))
379デフォルトの名無しさん
垢版 |
2020/08/10(月) 00:32:29.15ID:foQnjRqn
●使用環境
RegEx Lab(iOSアプリ,ICU Regex)
iOSショートカットアプリ

●検索か置換か?
検索

●説明
以下の2パターンのデータから"あいうえお"を取り出す正規表現を教えてください。
自分なりに考えたのですが↓ではうまくいきませんでした。
名前(?::<.+?>|:)(.*?)(?:</a>|$)
ちなみにCotEditorでは↑の正規表現でも検索できました。

●対象データ1

<div class="abcde_abcde">
名前:あいうえお
</div><!--abcde_abcde-->


●対象データ2

<div class="abcde_abcde">
名前:<a href="https://www.google.com";>あいうえお</a>
</div><!--abcde_abcde-->


●希望する結果
あいうえお
2020/08/10(月) 01:07:48.09ID:F9d2D5aE
>>379
RegEx Labちょうど使ってたので
https://i.imgur.com/4xeRITQ.png
2020/08/10(月) 01:16:40.29ID:rwR0rEzu
>>379
$が行末にマッチしてないだけなら、単に改行\Rに置き換えてみてもいいし正規表現の頭におまじない(?m)を足してみてもいい
置換じゃなくて検索なら
(?<=名前:<[^>]{0,99}?>).*?(?=</a>)|(?<=名前:)(?!<).*+
382デフォルトの名無しさん
垢版 |
2020/08/10(月) 01:36:35.46ID:foQnjRqn
>>380
>>381
こんなに色々なやり方があるんですね……勉強になります。
無事検索できるようになり本当に助かりました。
ありがとうございました!
383デフォルトの名無しさん
垢版 |
2020/08/11(火) 13:59:29.59ID:JW3Ec0IY
grepのperl正規表現オプションを使ってURLのホスト名を抽出したいです

https://mevius.5ch.net/test/read.cgi/tech/1568640311/l50
http://www.google.co.jp/

このスレだったら”mevius”
googleなら”www”
https://」or「http://」と「.」に挟まれた文字列の最短一致でできそうなのですがなぜか上手くいきません

1文字に挟まれたパターンは検索して出てくるのですが、複数文字に挟まれたパターンはあまり出てこなくて、この際はっきりしたいので「〇〇〇と△△△に挟まれた文字列の中身のみを最短一致で抽出」パターンも教えてください
2020/08/11(火) 14:15:33.95ID:47EO3/0I
>>383
/https?:\/\/([^./]+)/
grepもperlも知らないけどこんな感じでどうや
△△△が一文字なら△を含まない文字の連続で取るといいと思う
複数文字の場合は知らない
2020/08/11(火) 14:17:58.02ID:oEzBqY+p
grep知らずにここに居る人が存在するのか…
386デフォルトの名無しさん
垢版 |
2020/08/11(火) 14:33:07.25ID:JW3Ec0IY
>>384
早速ありがとうございます
ですがそのやり方ですとgrepでは抽出できませんでした

△△△は複数の種類の文字ですね言葉足らずでした
正しくは「ABC」と「DEF」に挟まれた文字みたいなものですね
2020/08/11(火) 14:36:19.90ID:giB5l2E5
$ cat input.txt
https://mevius.5ch.net/test/read.cgi/tech/1568640311/l50
http://www.google.co.jp/

$ grep -Po '(?<=:\/\/).+?(?=\.)' input.txt
mevius
www
2020/08/11(火) 14:37:41.53ID:47EO3/0I
>>386
できなかったか、すまん
これは自分には無理だわ
知識もないのにでしゃばるべきじゃなかったな
2020/08/11(火) 14:45:43.81ID:giB5l2E5
pcregrepならキャプチャグループを番号指定して出力可能

$ pcregrep -o1 ':\/\/(.+?)\.' input.txt
390デフォルトの名無しさん
垢版 |
2020/08/11(火) 15:47:36.92ID:JW3Ec0IY
>>388
いえいえ

>>387
>>389
おー、これでできました
pcregrepのやり方もありがとうございます
2020/08/11(火) 20:17:56.42ID:Uga1WByL
Javaで

setMethod();
getMethod();
setBake();

みたいなgetter,setterは検出したくなく、

Methoda();
Methodb();
bake();

みたいなset, getで始まっていない()付きの文字列を含む
行を正規表現一行で検出するするのはどうしたらいいのですか?
2020/08/11(火) 21:07:16.11ID:xo6O5h7F
^(?=.*?\b(?!set|get)[A-Za-z]++\(\);).*
^(?=.*\b(?!set|get)[A-Za-z]+\(\);).*
2020/08/11(火) 21:55:37.51ID:Uga1WByL
申し訳ありません。

Methoda() {
Methodb(){
c = z.Methoda().Methodb(a,b)

みたいな行は検索の対象にいれたいのですが
よろしくお願いします。
2020/08/11(火) 22:14:19.40ID:giB5l2E5
もうちょい目的と仕様をはっきりさせたほうがいいんじゃない?

get/setではじまってない()付きの文字列を含む行なら問題ないけど
get/setではじまってないメソッド定義やメソッド呼び出しをもれなく抽出したいということなら
正規表現だときつい気がする

後者ならコードをパースして使ってるメソッド一覧を出力するようなツールを探したほうがいいかも
2020/08/11(火) 22:27:44.94ID:xo6O5h7F
^(?=.*?\b(?!set|get)[A-Za-z]++\(\)).*
2020/08/11(火) 22:36:31.67ID:P147PBTZ
(?<=(?:\n|^|\.))(?<!set|get)[a-zA-Z]+\(
2020/08/11(火) 22:52:10.25ID:Uga1WByL
引数が無い and setter, getterではないメソッドを含んでいる行です
ひょっとして正規表現内では表現できないかもしれません。
文脈自由レベルでしょうか?
398デフォルトの名無しさん
垢版 |
2020/09/20(日) 19:06:52.11ID:shjW7F5c
5chのスレタイはこん感じで入っている

<a href="1599110613/l50">1: ぶっちゃけ始めるのにいい言語て何 part3 (78)</a>
<a href="1545032904/l50">2: 文字コード総合スレ Part12 (95)</a>
<a href="1598112455/l50">3: Rust part9 (198)</a>
<a href="1598336253/l50">4: 小6におすすめな言語 (32)</a>
<a href="1594528940/l50">5: C++相談室 part152 (404)</a>
<a href="1596690797/l50">6: Xamarin Part7 (97)</a>
<a href="1598527450/l50">7: くだすれPython(超初心者用) その50【まず1嫁】 (423)</a>

ここからたとえば「言語」とついたスレタイだけ抽出するのは無理だった

<a href="1599110613/l50">1: ぶっちゃけ始めるのにいい言語て何 part3 (78)</a>
<a href="1598336253/l50">4: 小6におすすめな言語 (32)</a>
2020/09/20(日) 20:06:08.38ID:XyOg3AIQ
>>397
いやもう
\b(?!set|get)\w+\(\)
でいいんでしょ
2020/09/20(日) 23:02:18.72ID:ylbIOeZ5
JavaScript では、これで複数行マッチ(g)できた
/<a[^>]+>.*言語.*<\/a>/g

<a で始まって、> 以外の文字が、1文字以上続いて、>
言語の前後に、.*
<\/a> で終わる

他には、Ruby でスクレイピングすれば?
2020/09/21(月) 00:25:21.75ID:18fwmJUF
>>400
おかしいな、それでうまくいかなかったのに

と思ったら入ってくるHTMLソースに改行がないようだ
</a>のあとに改行入れるとうまくいくように見えるけど、HTMLソースがおかしくなる

正規表現以前の問題だったわ
402400
垢版 |
2020/09/21(月) 02:18:58.27ID:+seX53Ud
別に抜き出すだけなら、
一旦、</a> の後ろに、改行を追加してから、正規表現を使えば?

それか、HTML をコピーしてから、やるとか
2020/09/21(月) 04:00:13.04ID:fovUI165
"/(<a(?>[^>]+)>(?>[^<]*?言語[^<]*)<\/a>)(?:<a(?![^<]*言語)(?>[^<]+)<\/a>)*/$1/g"
2020/09/21(月) 04:10:48.96ID:fovUI165
"/<a(?![^<]*言語)(?>[^<]+)<\/a>//g"
405400
垢版 |
2020/09/21(月) 05:27:30.09ID:+seX53Ud
Ruby, Nokogiri で、スクレイピングしたら、

require 'open-uri'
require 'nokogiri'

# プログラム技術@スレッド一覧
url = "https://mevius.5ch.net/tech/subback.html";

doc = Nokogiri::HTML( open( url ) )

# 「言語」という単語が含まれる、タイトルを表示する
ary = doc.css( "#trad > a" ).map { |elem| elem.content }
.select { |title| title.include? "言語" }

puts ary

出力
6: 次世代言語21 Go Nim Rust Swift Kotlin TypeScript (330)
10: 日本語プログラミング言語『なでしこ』スレ6.1c2ch.net (108)

以下略
406デフォルトの名無しさん
垢版 |
2020/09/21(月) 15:36:21.19ID:K0hBqhJG
冗談抜きでそんな無駄な努力するよりxpathとかそっち系おすすめするぞ
2020/09/21(月) 16:25:39.02ID:+MA8+KhA
単純なスクレイピングはcurl+pupが楽

$ curl -s https://mevius.5ch.net/tech/subback.html | pup '#trad > a' text{} | grep 言語 | head -5
408400
垢版 |
2020/09/21(月) 22:36:13.18ID:+seX53Ud
>>405
のopen-uri を、下のように、外部コマンドのcurl にも出来るけど、
普通は、わざわざ外部コマンドを呼ばない

url = "http〜"
doc = Nokogiri::HTML( open( url ) )

html = `curl http〜`
doc = Nokogiri::HTML( html )
2020/09/22(火) 15:43:36.39ID:fUgbeHE5
●Regular Expressionの使用環境
サクラエディタ
●検索か置換か?
置換
●説明
httpを含まない行の/を年に置き換えたい
●対象データ
https://5ch.net/
2020/9
●希望する結果
https://5ch.net/
2020年9
2020/09/22(火) 16:23:41.31ID:hefdb5Yb
こんなもんでもよろしいでしょうか。
あんまりうまくないと思いますが。
よろしくお願いいたします。

置換前
^(?!http)([0-9]{4})(/)

置換後
$1年
2020/09/22(火) 16:33:21.65ID:fUgbeHE5
>>410
ありがとうございます。うまくいきました。
2020/09/23(水) 20:03:55.75ID:itvZvUM6
>>403
>>404
なんかすげえな

>>402,405-408
いろいろやり方あるんだね、サンクス
2020/09/25(金) 14:10:58.84ID:3NF+8528
●Regular Expressionの使用環境
Linux
awkとか、sed。
目的が置換なので、コマンドはなんでも構いません。

●検索か置換か?
置換

●説明
= 任意の文字列 :
を置き換えたい
※前後に半角スペースあり。

●対象データ
hogeghoe = type: furagura
mogemoge = syntax: mojamoja

●希望する結果
hogeghoe type: furagura
mogemoge syntax: mojamoja
※スペースで置き換えた例


よろしくお願いいたします。
2020/09/25(金) 14:14:55.55ID:3NF+8528
>>413
取り消します。精査する前に書き込んでおり
間違いがございました。すいません。



●Regular Expressionの使用環境
Linux
awkとか、sed。
目的が置換なので、コマンドはなんでも構いません。

●検索か置換か?
置換

●説明
= 任意の文字列 :
を置き換えたい
※前後に半角スペースあり。

●対象データ
hogeghoe = type: fuga:fuga
mogemoge = syntax: moja:moja
※置換目的のコロンの後ろにさらにコロンがある場合があります。
 =から「次の最初のコロン」までが置換対象です。

●希望する結果
hogeghoe fuga:fuga
mogemoge moja:moja
※スペースで置き換えた例

よろしくお願いいたします。
2020/09/25(金) 14:24:47.87ID:q10QaMUD
>>414
sed 's/ =[^:]*://g'
2020/09/25(金) 16:57:28.24ID:3NF+8528
>>415
ありがとうございます。理解を超えた書き方なので
そのまま利用いたします・・・
2020/09/25(金) 21:14:34.14ID:9rvIESf7
>>416
そんなに難解ではないぞ
: でない文字が0個以上続いて
その後に一文字だけ : があるパターンを
すべてスペースに書き換えるというだけの意味
2020/09/25(金) 22:49:57.38ID:rXEBHfdh
●使用環境:RegEx Lab(iOSアプリ,ICU Regex)
●検索か置換か?:検索
●説明:時間毎の内容を取り出したいです。自分でも考えてみたのですが、(?m)(?<=\d{1,2}:\d{2}\r)([\s\S]*?)\r ではAt〜Mediaまで取得できませんでした。
補足として、各内容の前後には必ず時間と空白行が挿入されています。ただし、テキストにも空白行が挿入されている場合があります。ちなみに日付毎にファイルが分かれているため、対象データ最上部の日付が途中に挿入されることはありません。

●対象データ

25 September 2020
=================

8:05
テキスト1

10:44
テキスト2
At: スポット名: 位置情報・座標
Tags: タグ1, タグ2
Media: 123abcdefg.jpg
Media: hijklmn456.png

●希望する結果
○マッチ1
テキスト1

○マッチ2
テキスト2
At: スポット名: 位置情報・座標
Tags: タグ1, タグ2
Media: 123abcdefg.jpg
Media: hijklmn456.png
419デフォルトの名無しさん
垢版 |
2020/09/26(土) 02:18:28.42ID:Xs9MiFl7
とりあえず鬼雲なら
\d\d?:\d\d\n(([^\n]+\n)+)
で\1なり$1なりで取り出せるけど

どー使うのかしらねーけど改行に続く時刻消せばいいんじゃねw
2020/09/26(土) 07:24:38.50ID:QW/S7GaB
\d\d?:\d\d\n\K((.(?!^\d\d?:\d\d))+\n)+
マッチに時間の直前の空行まで含めるのか?含まないのか?
テキスト終端(例だとテキスト1\n 456.png\n)の改行文字を含めるのか?含まないのか?
マッチがどこまでなのか曖昧
2段階になるけど一旦時刻をテキスト中に現れない文字に置換すれば簡単に出来る
^\d\d?:\d\d → ★
[^★]+
時刻の直前の空行を含まないのなら
\n\d\d?:\d\d → ★
テキスト終端の改行を(ry
\n\n\d\d?:\d\d → ★
2020/09/26(土) 19:21:20.61ID:aEJhlUXF
>>419
>>420
ありがとうございます!
試してみたところ、Meryでは問題なく動作しているようでしたがRegEx Labでは動作しませんでした…

> 時間の直前の空行
>テキスト終端(例だとテキスト1\n 456.png\n)の改行文字
どちらも含めずに取得したいです。
422デフォルトの名無しさん
垢版 |
2020/09/26(土) 19:40:36.95ID:5brst4gY
(?m)(?<=^\d{1,2}:\d{2}(?:\r\n|(?<!\r)\n|\r(?!\n)))^[\s\S]*?(?=(?:\r\n|(?<!\r)\n|\r(?!\n))+\d{1,2}:\d{2}(?:\r\n|(?<!\r)\n|\r(?!\n))|(?:\r\n|(?<!\r)\n|\r(?!\n))*\z)
2020/09/26(土) 20:25:49.24ID:W0BkzYxL
こういう長い正規表現てやっぱ遅くなったりするの?
424デフォルトの名無しさん
垢版 |
2020/09/26(土) 20:47:28.01ID:5brst4gY
これでよかったっぽい
(?m)(?<=^\d{1,2}:\d{2}(?:\r?\n|\r))^[\s\S]*?(?=(?:\r?\n|\r)+\d{1,2}:\d{2}(?:\r?\n|\r)|(?:\r?\n|\r)*\z)
425デフォルトの名無しさん
垢版 |
2020/09/26(土) 20:48:16.86ID:5brst4gY
>>423
どうだろうね、基本的な構造は>>418と同じだけど
データの改行コードがどうなっているのか謎だったのでとりあえず全種類対応しようと欲張ったらこんなことに

\n に置き換えるとこう
(?m)(?<=^\d{1,2}:\d{2}\n)^[\s\S]*?(?=\n+\d{1,2}:\d{2}\n|\n*\z)
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況