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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

3231閲覧

正規表現で特定の言葉を含むものを否定したい

Nero1129

総合スコア130

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/03/24 08:51

編集2020/03/24 09:01

前提・実現したいこと

Twitterって面白いね Instagramって面白いね

探索対象は面白いに対して、Twitterという特手の文字列を含まないという条件を設定することってできますか?
調べたのですが、特定の1文字のみであれば可能みたいな記事ばかりで、特定の文字列に関しては全然記述がなくできませんでした。

解決方法があれば教えてください。

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

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

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

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

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

LouiS0616

2020/03/24 08:58

『再帰的に改行で文章を取得する』とはどういう意味でしょうか。
Nero1129

2020/03/24 09:01

そこは無視してもらって大丈夫です。 今修正します。
yambejp

2020/03/24 09:03 編集

「Twitterって面白くないよ Instagramって面白いね」は 命題の「面白いに対して、Twitterという特定の文字列」を 含むと見なすのですか、含まないと見なすのですか? また「面白いと思わない」でも「面白い」にヒットしてもいいんですね?
Nero1129

2020/03/24 09:08

Twitterは含まないと記述しましたよ。 「面白いと思わない」はヒットさせていいです。 が、ヒットさせない方法があるのであれば、勉強がてら知りたいです。
yambejp

2020/03/24 09:14 編集

> Twitterは含まないと記述しましたよ。 ちょっと命題がわかりづらい 「面白い」があろうがなかろうが「Twitter」はヒットしない じゃあどういう条件で何にヒットするのって話です
Nero1129

2020/03/24 09:47 編集

面白い∩Twitter^c で通じますかね? すみません。MDじゃないので数式が書けないので、記号を読み取ってもらえると幸いです。 言葉に直せば… 面白い だが Twitter ではない
guest

回答3

0

ベストアンサー

Pythonの正規表現が否定先読みができるなら、こんな書き方が妥当

^(?!.*?Twitter).*?面白い.*

投稿2020/03/24 10:31

編集2020/03/24 10:31
yambejp

総合スコア116724

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

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

yambejp

2020/03/24 10:43

jsでもできるので多分pythonでも大丈夫でしょう 参考までにjsのケース arr=[ "Twitterって面白いね", "Instagramって面白いね", "Twitterって面白くない", "Instagramって面白くない", "面白いのはTwitterだよ", "面白いのはInstagramだよ", ]; arr.forEach(x=>{ if(r=x.match(/^(?!.*?Twitter).*?面白い.*/)){ console.log(r); }; });
guest

0

固定文字列の有無なら正規表現を使わなくてもいいです。

Python

1data = [ 2"Twitterって面白いね", 3"Instagramって面白いね", 4] 5 6for x in data: 7 if "Twitter" not in x and "面白い" in x: 8 print(x)

正規表現を使う場合でも、同様に、

Python

1for x in data: 2 if not re.search("Twitter",x) and re.search("面白い",x): 3 print(x)

投稿2020/03/24 09:58

otn

総合スコア85901

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

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

0

分割して考えるのが簡単でしょう。

Python

1import re 2 3 4src = ['Twitterって面白いね', 'Instagramって面白いね', ] 5 6for row in src: 7 if re.search(r'twitter', row, flags=re.IGNORECASE): 8 continue 9 10 if re.search(r'面白い|おもしろい', row): 11 print(row)

MULTILINEモードでre.findallしている場合は、str.splitで行毎に分割してしまえば良いです。

投稿2020/03/24 09:10

LouiS0616

総合スコア35668

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問