🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

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

正規表現

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

Python

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

Q&A

解決済

2回答

988閲覧

実行結果から必要なデータのみを正規表現を用いて抽出したいです.

gc0o_r

総合スコア9

Python 3.x

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

正規表現

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

Python

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

0グッド

0クリップ

投稿2019/11/08 03:04

相談内容

正規表現を用いて4000行程度のテキストファイルから必要な部分のみを抽出したいのですが,うまくできません.

文字列のスライスを使って抽出しようとしましたが,行によって実行結果の文字数が異なるため上手くいきませんでした.

実装したい内容

result.txt

1Row 0: 0.299635+0.000351244j -3.25261e-019+3.17934e-007j 2Row 1: 2.38524e-018+3.05509e-007j 0.0182621+6.09987e-006j

このような実行結果から3つの値を取り出したいです.

demand.json

1{ 2 'upper right': 3.17934e-007, 3 'bottom left': 3.05509e-007, 4 'bottom right': 6.09987e-006, 5}

jの係数を3つ,算術符号を除いた状態で取得するにはどういった方法がありますでしょうか.

自分の思いついたものとして正規表現がありますが,現状実装できていないのもあり手段は問いません.

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

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

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

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

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

guest

回答2

0

ベストアンサー

正規表現を使うのではなく、文字列を複素数にキャストして、虚数部を抜き出した方がよいのではないでしょうか

Python

1with open('data.txt') as f: 2 ret = [] 3 for row in f: 4 r = list(map(lambda s: complex(s).imag, row.split(' ')[-2:])) 5 ret.append(r) 6print(ret) 7#[[0.000351244, 3.17934e-07], [3.05509e-07, 6.09987e-06]]

投稿2019/11/08 03:27

magichan

総合スコア15898

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

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

gc0o_r

2019/11/08 03:51

そういった方法があることを初めて知りました! ありがとうございます!
guest

0

フォーマットがいまいち分かりませんが、+からjまでを取り出せば良いのかなと思います。

Python

1import re 2 3 4src = """ 5Row 0: 0.299635+0.000351244j -3.25261e-019+3.17934e-007j 6Row 1: 2.38524e-018+3.05509e-007j 0.0182621+6.09987e-006j 7"""[1:-1] 8 9dst = re.findall(r'+(.+?)j', src) 10print(dst)

実行結果 Wandbox

['0.000351244', '3.17934e-007', '3.05509e-007', '6.09987e-006']

丸投げな感があるので詳細な解説は書きません。

投稿2019/11/08 03:20

LouiS0616

総合スコア35668

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

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

LouiS0616

2019/11/08 03:32

> フォーマットがいまいち分かりません 複素数って、実部と虚部それぞれに指数表記を使えたのですね。 知りませんでした。お恥ずかしい。
gc0o_r

2019/11/08 03:56

丸投げな感じが出てしまいましたか,すいませんでした. 算術符号は+とは限りませんと書くべきでした,すいませんでした.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問