質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

4回答

1431閲覧

正規表現 先頭から最後の繰り返し文字までを拾うには

退会済みユーザー

退会済みユーザー

総合スコア0

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2020/10/01 23:53

例えば

C:\Users\User1\Documents\GitHub C:\Users\User1\A\B\C

が対象文字列の場合,\を繰り返し文字として

C:\Users\User1\Documents\ C:\Users\User1\A\B\

を抽出できるような正規表現を探しています.

よろしくお願いします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2020/10/02 00:03

PythonやPHPなどですか? それともエディタの正規表現機能ですか?
Daregada

2020/10/02 00:05

「C:\Users\User1\Documents\GitHub」や「C:\Users\User1\A\B\C」といったパスは、それぞれ別の文字列として与えられるのか、改行で接続されたひとつの文字列として与えられるのか、どちらでしょうか。 先頭がC以外のドライブだったり、「\\hoge\fuga\piyopiyo」だったりするような場合もマッチさせますか。 末尾が\で終わる場合、パス全体をマッチさせますか。 といった辺りが知りたい。
退会済みユーザー

退会済みユーザー

2020/10/02 00:11 編集

Pythonです.(エディタの正規表現機能ではない) それぞれ別の文字列です. 先頭がCドライブの場合です. 末尾が\で終わる場合、パス全体をマッチとします.
guest

回答4

0

ゆるくマッチさせるとしたら「^.*\」。

Pythonです.(エディタの正規表現機能ではない)

それぞれ別の文字列です.
先頭がCドライブの場合です.
末尾が\で終わる場合、パス全体をマッチとします.

と詳細が明らかになったので、「^C:.*\

投稿2020/10/02 00:07

編集2020/10/02 00:17
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

「繰り返し文字」とは?

こういうときには、正規表現じゃなくて、専用の関数を使うのがいいです。
意図が明確になります。

Python

1>>> os.path.dirname('C:\Users\User1\Documents\GitHub')+'\' 2'C:\Users\User1\Documents\' 3 4>>> os.path.dirname('C:\Users\User1\Documents\GitHub\')+'\' 5'C:\Users\User1\Documents\GitHub\'

末尾に\は付かないので追加ですが、ここで追加せずにos.path.joinの利用も検討すべき。
os.path.join(os.path.dirname(~~), ~~)

投稿2020/10/02 01:28

otn

総合スコア85949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「繰り返し文字」の定義がよくわかりませんが
正規表現のマッチは最長マッチが原則なので先頭から円マークまでを拾うと、
その行の最後の円マークまでのマッチになります
あとは言語次第

投稿2020/10/02 00:19

yambejp

総合スコア116835

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/10/02 00:20

jsならこう const urls=[ 'C:\x5cUsers\x5cUser1\x5cDocuments\x5cGitHub', "C:\x5cUsers\x5cUser1\x5cA\x5cB\x5cC", ]; urls.forEach(x=>console.log(x.match(/^.*\x5c/)));
guest

0

Pythonです.(エディタの正規表現機能ではない)

それぞれ別の文字列です.
先頭がCドライブの場合です.
末尾が\で終わる場合、パス全体をマッチとします.

それなら、こんな感じが楽かなと。

Python

1import re 2 3src = [ 4 r'C:\Users\User1\Documents\GitHub', 5 r'C:\Users\User1\A\B\C', 6 r'C:\Users\User1\'[:-1] 7] 8 9for e in src: 10 dst = re.fullmatch(r'(C:.*\)[^\]*', e).group(1) 11 print(dst)

投稿2020/10/02 00:16

LouiS0616

総合スコア35668

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問