- PR -

正規表現 VB2005 初心者でスミマセン

1
投稿者投稿内容
さとっと
会議室デビュー日: 2009/01/20
投稿数: 3
投稿日時: 2009-01-20 18:35
VB2005で開発中ですが、正規表現による置換を行うアプリケーション作成中です。

しかしどうしてもうまくいかないところがあり、恥を忍んで投稿します。


(1)
---------------ここから例文
今日は暑いです。
僕はプールに行きましたーー
---------------ここまで例文

のような文章があったときに、「。\n」を削除して

---------------ここから結果例文
今日は暑いです◎▲◎僕はプールに行きましたーー
---------------ここまで結果例文

としたいときに

AfterText = (Regex.Replace(OrgText, "。\n", "◎▲◎"))

ではいけないのでしょうか?

改行のみを置換の時はうまくいくのですが
AfterText = (Regex.Replace(OrgText, "\n", "◎▲◎"))

2語の置換がうまくいかないのはなにがいけないのでしょうか?


(2)
当方秀丸の正規表現はよく使っておりますが、.netは始めてでして以下のような置換をどのようにやったらいいのかわかりません。


---------------ここから例文
こんにちはー
open
your
textbook
---------------ここまで例文





---------------ここから結果例文
こんにちはー
open◎▲◎your◎▲◎textbook
---------------ここまで結果例文

(ひらがなと英語の間は置換したくないが英語と英語の間の改行は置換したい)


秀丸だと
検索語 [a-z]\f\n\f[a-z]
置換語 \0◎▲◎\2
でうまくいくのですが・・・



過去ログも色々検索してみたのですが、私の質問が初歩的すぎて同じようなものがないようです・・・お許しください。

武史
ベテラン
会議室デビュー日: 2007/09/21
投稿数: 71
投稿日時: 2009-01-20 18:52
\n は、ChrW(10) にしかマッチしません。
改行コードが、CrLf とか、違うのになっているんじゃないでしょうか。

参考:
コード:
Console.WriteLine(Regex.IsMatch("a" & ChrW(13) & ChrW(10) & "a", "a\na")) ' False
Console.WriteLine(Regex.IsMatch("a" & ChrW(10) & "a", "a\na")) ' True
Console.WriteLine(Regex.IsMatch("a" & ChrW(13) & "a", "a\na")) ' False


King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-01-20 18:56
Regex.Replace(OrgText, "。\r\n", "◎▲◎")
とかだったり・・・。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2009-01-20 19:03
いっそのこと、CR でも LF でも CR+LF でも大丈夫にしちゃうとか。
コード:
AfterText = Regex.Replace(OrgText, "。(\r\n|\r|\n)", "◎▲◎")



引用:

さとっとさんの書き込み (2009-01-20 18:35) より:

秀丸だと
検索語 [a-z]\f\n\f[a-z]
置換語 ◎▲◎2
でうまくいくのですが・・・


スレ違いですが、秀丸だとなんで大丈夫なんでしょうね?
ヘルプを読んだ限りでは、秀丸も \n は文字コード 10 を表すっぽいのですが。
さとっと
会議室デビュー日: 2009/01/20
投稿数: 3
投稿日時: 2009-01-20 19:07
武史さま。ご返答ありがとうございます。
ChrW(13) & ChrW(10)だと確かにマッチします。ありがとうございます!!

理解が足りないまま質問してスミマセンでした。

Kingさまもご返答ありがとうございます!!
rainさま。ありがとうございます!

\r\n|\r|\n

ちょっとトライしてみます!!

ちなみに秀丸ではなぜかうまく行っていて、気にもしていませんでした。

秀丸で開いたものをコピーしてテキストボックスにペーストしてもそれらの改行コードは変わらないんですよね??それともファイルを開いてテキストボックスで表示するのとは違いがあるのでしょうか??



(2)の質問は私の質問の仕方が悪いでしょうか?

検索したもの自体残して置換したい場合どのようにすればいいのかわからないので質問しました。

aaaaaあbbbbbb


「あ」が挟まれた単語を入れ替えて、「あ」を取りたい・・・等という場合はなにか方法があるのでしょうか?

bbbbbb aaaaa

みないな・・・

初心者でスミマセン。みなさま本当にありがとうございます(*^_^*)
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-01-20 19:19
> (2)の質問

コード:

AfterText = Regex.Replace(OrgText, "[a-z]\r\n[a-z]", new MatchEvaluator(HogeMatchEvaluator));

public static string HogeMatchEvaluator(Match match)
{
    return Regex.Replace(match.Value, "\r\n", "◎▲◎");
}


で取り敢えず出来ましたけど、こんな事までしなくても出来そうな気がします・・・。
C# ですけど VB に読み替えて下さい。
さとっと
会議室デビュー日: 2009/01/20
投稿数: 3
投稿日時: 2009-01-20 19:23
Kingさま。

C#経験ありませんが、解読してみます!!

.netの正規表現には検索にヒットしたものを何かに代入するようなものはないということですね?

もっと色々勉強してみます!またわからないところがあったら投稿してしまうと思いますが宜しくお願いします。

ちなみに正規表現について詳しく書いてあるサイトがありましたら教えていただきたいです(>_<)
武史
ベテラン
会議室デビュー日: 2007/09/21
投稿数: 71
投稿日時: 2009-01-20 19:39
サイトでいえば

http://msdn.microsoft.com/ja-jp/library/hs600312(VS.80).aspx

が、ご本家です。

ここから、[正規表現言語要素] -> [文字のエスケープ] をたどると、
今回の話のあたりです。

残したい場合の話は、かっこで囲んで、$1 とかでいいかも。

Regex.Replace( str, "([a-z]+)\r\n([a-z]+)", "$1$2 )

とか。
1

スキルアップ/キャリアアップ(JOB@IT)