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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

正規表現

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

Q&A

解決済

3回答

327閲覧

正規表現で特定文字をsplitしたい

hitohito.pitcha

総合スコア64

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

正規表現

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

0グッド

0クリップ

投稿2019/02/20 00:49

やりたいこと

a = "ああああああ日本 | いいいいいいいいいい日本aaa.co.jp/日本/bbb"
上記のような文字変数に対して「aaa.co.jp」の前に位置する「日本」を split したい

困っていること

「日本」を split すると、他に位置する「日本」まで split してしまう。
そのため、規則的な文字配列を考えると「英数半角文字の直前に位置する」ことを条件にして、
「日本」を split すれば行けるのではと考えていますが、正規表現の組み合わせ方法が分からず、困っています。

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

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

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

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

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

t_obara

2019/02/20 03:26

日本をsplitと言う表現に違和感を覚えますが、splitというからには日本を区切り文字として分離したいということですか?ある条件の場合の日本を抽出したいと言う意味ですか?それとも、単にaaa.co.jpというドメインを抽出したいということでしょうか? また、一部回答で提示されていますが正規表現の場合、条件が重要なので、想定される条件を箇条書きでご提示されるとより適切な回答を得られやすくなるかと思います。
KojiDoi

2019/02/20 03:36

>「日本」を split すると、他に位置する「日本」まで split してしまう。 t_obaraさんもいっているように、これはいったいどんな結果を期待しているのかよく分かりません。 その「ほかに位置する「日本」までsplit」してしまったコードを示してください。期待した結果と実際に得られた結果を両方書いてください。
hitohito.pitcha

2019/02/20 07:46

拙い伝え方でご迷惑をお掛けしております。 期待している結果としては、以下のような配列に変換したいです。 a = "ああああああ日本 | いいいいいいいいいい日本aaa.co.jp/日本/bbb" ↓ a = ["ああああああ日本 | いいいいいいいいいい","aaa.co.jp/日本/bbb"] splitを用いて、特定位置(ドメイン表記前)にある 特定文字列(日本)を分割して、リストとして格納したいです。
KojiDoi

2019/02/20 08:15

「特定文字列(日本)を分割して、」という表現は、標準的な日本語では、"日本"という文字列を"日"と"本"に分けることを意味します。あなたのやりたいことはおそらく、「対象文字列を特定文字列*で*分割する」でしょう。
hitohito.pitcha

2019/02/20 08:50

ご指摘の通りでございます。補足説明ありがとうございます。
guest

回答3

0

ベストアンサー

肯定的先読みが正解のようです。

python

1import re 2 3a = "ああああああ日本 | いいいいいいいいいい日本aaa.co.jp/日本/bbb" 4b = re.split(r'日本(?=[a-zA-Z0-9.]+)', a) 5

投稿2019/02/20 08:12

KojiDoi

総合スコア13671

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

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

hitohito.pitcha

2019/02/20 08:54

やりたいことが実現できました! 理解不足の中で拙い質問に、お付き合いいただき、ありがとうございました。 大変感謝しております。今後もよろしくお願いします。
guest

0

「英数半角文字の直前に位置する」

ということですね。

Python

1r'日本(?=\w)`

\wだと下線も含まれるので、下線を除きたければ[A-Za-z0-9]で。

また、

「日本」を split したい

は、文章の意味をなしません。文字列処理プログラミングにおけるsplitの意味が分かってない、もしくは、日本語の助詞が苦手、のどちらからだと思います。どういう結果が欲しいのか具体的に書きましょう。

投稿2019/02/20 03:45

編集2019/02/20 03:45
otn

総合スコア84708

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

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

0

aaa.bbb.ccc「が」先にくるパターンですよね?

正規表現の先読みを使うと良いのです。
列車の中なので、確認できず合っているかは保証できませんが
(?<=aaa.bbb.ccc/)日本
でいけるのではないでしょうか

投稿2019/02/20 00:54

impepc

総合スコア86

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

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

hitohito.pitcha

2019/02/20 01:42

早急に回答いただき、ありがとうござます! 条件としましては、aaa.bbb.ccc「が」後にくるパターンになります。 提示例だと「日本aaa.co.jp」の「日本」をsplit したいです。 また、複数の変数を一括splitすることも予定してるため、 上記のように「aaa.co.jp」が固定値ではなく「bbb.co.jp」になる場合もあります。 共通していることは、URL部分になるので、英数半角文字が規則になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問