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

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

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

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

正規表現

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

Python

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

Q&A

解決済

2回答

892閲覧

(Python)正規表現でマッチした部分のみ空白を削除したい

sou__

総合スコア2

Python 3.x

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

正規表現

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

Python

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

0グッド

0クリップ

投稿2021/09/28 00:23

実現したいこと

Pythonの正規表現を使ってパターンにマッチした部分のみスペースを削除したいです。

固定長ファイルから読み込んで、1行をデータごとにsplit関数で区切るプログラムを作成しています。
以下のようなデータを「身長(cm)」「体重(kg)」のように一つのかたまりとして処理したいです。しかし、単位と単位記号の間にスペースがあるため、このままでsplit関数を使用すると2つのデータとしてリストに格納されてしまいます。

この間のスペースを、文字列を厳密なパターンで判定し、削除することは可能でしょうか?

どなたかご教授のほど、よろしくお願いいたします。

該当のソースコード

Python

1data = ' 身長 (cm) 体重 (kg) BMI(kg/(cm*cm)) ' 2 3pattern = re.compile('\s+(') 4 5if pattern.search(data): 6 ''' マッチした部分のスペースを削除 ''' 7 print(pattern.sub('(', sub))

試したこと

pattern = re.compile('[一-龥]+\s+([a-z]')

当初はより厳密なパターンで判定をしていました。しかし私の知っている方法(subで文字列を置き換える)では、ここからスペースを削除することができなかったので、ボツになりました。

Pyhonのバージョン

python3.9.6

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

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

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

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

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

guest

回答2

0

ベストアンサー

あれ?全角スペースには気付きませんでしたが、以下でできちゃいました。
\sに全角スペースが含まれているんでしたっけ??

>>> data = ' 身長 (cm) 体重 (kg) BMI(kg/(cm*cm)) ' >>> pattern = re.compile('(\S+)\s*(') >>> print(pattern.sub('\1(', data)) 身長(cm) 体重(kg) BMI(kg/(cm*cm))

投稿2021/09/28 01:01

itagagaki

総合スコア8402

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

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

sou__

2021/09/28 01:09

漢字を「空白ではない」で判定するんですね!! 一点ほどよろしいでしょうか。3行目の '\1(' というのはどのような意味ですか?
itagagaki

2021/09/28 01:16 編集

正規表現のパターンで\s+を()で囲っています。これをグルーピング、グループ化といいます。 このように設定したグループは、順番に \1 \2 \3 という形で参照することができます。 \1というのは文字列中のエスケープシーケンスで \1 を表しています。 '\1(' ではなく r'\1(' でもいいですね。っていうかそのほうがスマートかな。 \1に(を付けているのはわかりますよね?
sou__

2021/09/28 01:26

なるほど、とてもスッキリしました!! グループ化がいまいちわかっていなかったのですが、こうやって使うんですね。他のパターンももう少しスマートにできそうです。 ありがとうございます!!
guest

0

全角空白も含まれていますね。以下で良いのではないでしょうか。

python

1>>> s_list = re.split(r'\s+', pattern.sub('(', data).strip('  ')) 2>>> print(s_list) 3['身長(cm)', '体重(kg)', 'BMI(kg/(cm*cm))']

投稿2021/09/28 00:48

ppaul

総合スコア24666

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

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

sou__

2021/09/28 01:03

なるほど、stripでさらに削除するんですね。 ほかのデータでも試したところ意図したとおりのデータが出ました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問