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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

1回答

1221閲覧

正規表現を使用して、目的とする文字列のみ取得したい

milkwalking

総合スコア60

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2019/06/03 08:58

前提・実現したいこと

SQL上に

【11月分イベントクーポン】 AjsusdPPaaMKL
CCA テキスト出力完了

というようなデータが格納されています。
このデータの「AjsusdPPaaMKL」の部分だけ文字列の変数に格納したいです。
この「」内の文字列は任意の文字列で文字数などに決まりはありません。

抜き出したい文字列の前後にいらないものがはいっている場合、どうやって抜き出していいのかがわからないです、、、
抜き出したい文字列の前後の文字を正規表現で指定するんでしょうか、、、

お手数ですが、ご教示お願いいたします。

補足情報(FW/ツールのバージョンなど)

言語はC#
Windows Formを使用してアプリを作成中です
SQLサーバー
Microsoft SQL Server 2014 - 12.0.2269.0 (X64)
Express Edition (64-bit) on Windows NT 6.3 <X64> (Build 17763: )

VisualStudio2017という環境です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。

あなたの言う「いらないもの」が何なのかによって回答が無限に存在します。
まずやらなければいけないことは、

  • 「いらないもの」を確実に特定できる「ルール」を発見する

です。この「ルール」が決定されない限り、プログラムで自動的に解決することは不可能です。
特定のフォーマットに合致しているのであれば、正規表現が使えるかもしれないし文字列操作だけで解決できるかもしれません。
質問の例だと、「空白文字と改行文字をデリミタとして Split して、その2番目」で足りるかもしれないですね。もしかしたら、「必要なデータ」側に空白文字が含まれていたりして、うまくいかないかもしれませんね。

というわけで、まずは該当のデータをたくさん集めて、ルールを探してください。

投稿2019/06/03 09:14

tamoto

総合スコア4110

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

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

milkwalking

2019/06/03 09:17

回答ありがとうございます。 「いらないもの」を確実に特定できる「ルール」を発見する という部分を明確にすることでそれに対応する正規表現で取得するというイメージですね。。。 例えば抜き出す文字数とか前後に必ずくる文字 などでしょうか。。。
tamoto

2019/06/03 09:41

そういうことです。 例に挙げた `Split` のものは、文字列をスペースと改行で分割したとき、2つ目に「欲しいもの」がある、という「ルール」を示しています。 なので、2つ目に「欲しいもの」が無いパターンがあると、不正な値が混じってしまうことになります。例えば1つ目の「いらないもの」の中に空白が1つあったら、2つ目は「いらないものの後半」になっちゃいますね。
hihijiji

2019/06/03 09:44

言い方を変えると、必要な部分*だけ*に適用できるルールがあれば抽出は可能です。 例えば12文字以上連続した半角アルファベットとか
milkwalking

2019/06/03 09:55

なるほどです、、 今回は【】の】の後ろから改行までの文字 という法則で抜き取るのが一番正確かなと現在考えています。(どうすればいいかわかってないですが、、) というのも【】の中と改行以降はユーザ編集可能で文字数も決まってないからです。 抜き出した後にTRIMなどで空欄を切り取ればきれいにとれるのかなと考えています。
tamoto

2019/06/03 10:05

ルールを定めたら、いよいよそのルールを「正規表現で書く」方法を調べましょう。 正規表現なら Web 上に情報がたくさんありますし、正規表現自体がわからないというのなら、今後にも役に立ちますので今が学ぶチャンスです。 口に出して人に説明できるルールが作れたら、大抵は正規表現で書けるので安心してください。 正規表現にも方言があるので、C# と関連する情報をあたるのが良いでしょう。
milkwalking

2019/06/03 10:20

.(ピリオド) で 】を指定して、、それ以降の文字 + 改行する前まで 指定は「 \r  \n 」どちらか 例えば、】の】の後ろから改行までの文字であれば 上の考え方であってますでしょうか。
tamoto

2019/06/04 00:03

】はただの文字なのでそのままマッチさせ、以降の期待する文字は中身が不明なので .+ でマッチさせることになると思います。 一通り学んで試してみてわからなかった部分は改めて質問を立てると良いでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問