要点:

RTF ファイル対応 (書式を表示できる) のアプリケーションで、正規表現の前方一致(不一致)や後方一致(不一致)が使えるものを教えてください。

事情
RTF ファイルで以下のようなテキストを
I have a
question.
以下のように置き換えたいと思っています。
I have a question.
つまり、文頭が小文字で始まる(改行の次が小文字である)場合にその改行を削除してスペースに置き換えたいわけです。

秀丸の正規表現でいうところの「\n(?=[a-z])」を「 」(半角スペース) で置き換えるのと同じなのかと思います。秀丸ではRTFフォーマット自体がデータとして表示されてしまいますし、MS-Wordでは前方一致や後方一致をサポートしていません。(ほかに方法がなければVBAかな)

人力検索のお知恵を拝借したいと思います。
よろしくお願いします。

回答の条件
  • 1人1回まで
  • 登録:2008/11/28 19:53:57
  • 終了:2008/12/05 18:50:47

ベストアンサー

id:airplant No.1

airplant回答回数220ベストアンサー獲得回数492008/11/29 12:45:32

ポイント70pt

rtfと正規表現が使えるものは中々なさそうなので、Wordのマクロで実現して見ました。

Sub Conv()

    Call ChgCR("^l")    '行区切り
    Call ChgCR("^p")    '改行
    
End Sub
    
Sub ChgCR(sText As String)

    Dim rowCheck As Long

    Selection.GoTo What:=wdGoToLine, _
        Which:=wdGoToFirst, Count:=1, Name:=""
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = sText
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = False
        .MatchFuzzy = False
    End With
    
    Do While Selection.Find.Execute = True
        rowCheck = Selection.Start
        Selection.MoveRight unit:=wdCharacter, Count:=1
        ' 最終文字なら処理せずに抜ける
        If Selection.Start > rowCheck Then
            ' ^[a-z]の判定
            If Selection.Text <> UCase(Selection.Text) Then
                ' ^[a-z]なら前の改行又は行区切りをスペースに変更
                Selection.TypeBackspace
                Selection.TypeText Text:=" "
            End If
        Else
            Exit Do
        End If
    Loop
     
End Sub

Wordのnormalに上記マクロを組み込んで使ってください。


行区切り(「↓」で表示される)と改行があるので、両方を\nの扱いにしました。

なお、正規表現で試みてみたのですが、どうもWordでは書式が変更されてしまうので、断念しました。

id:Nigitama

ありがとうございます。

土日はちょっと出ていたのでオープンできませんでした。

ざっと見る限り「そのまんま」の処理をマクロで処理しているようですね。

(「そのまんま」というのは悪い意味ではありませんよ)

どのような方法でも結果がでればよいですし、

マクロで組めれば柔軟性がありますのでいろいろと幅が広がります。

とりあえず今夜は時間がありませんので、

12/1 移行に実際にためしてから また追記いたします。

取り急ぎオープンしましたという通知まで。

2008/11/30 23:47:48

その他の回答(1件)

id:airplant No.1

airplant回答回数220ベストアンサー獲得回数492008/11/29 12:45:32ここでベストアンサー

ポイント70pt

rtfと正規表現が使えるものは中々なさそうなので、Wordのマクロで実現して見ました。

Sub Conv()

    Call ChgCR("^l")    '行区切り
    Call ChgCR("^p")    '改行
    
End Sub
    
Sub ChgCR(sText As String)

    Dim rowCheck As Long

    Selection.GoTo What:=wdGoToLine, _
        Which:=wdGoToFirst, Count:=1, Name:=""
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = sText
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = False
        .MatchFuzzy = False
    End With
    
    Do While Selection.Find.Execute = True
        rowCheck = Selection.Start
        Selection.MoveRight unit:=wdCharacter, Count:=1
        ' 最終文字なら処理せずに抜ける
        If Selection.Start > rowCheck Then
            ' ^[a-z]の判定
            If Selection.Text <> UCase(Selection.Text) Then
                ' ^[a-z]なら前の改行又は行区切りをスペースに変更
                Selection.TypeBackspace
                Selection.TypeText Text:=" "
            End If
        Else
            Exit Do
        End If
    Loop
     
End Sub

Wordのnormalに上記マクロを組み込んで使ってください。


行区切り(「↓」で表示される)と改行があるので、両方を\nの扱いにしました。

なお、正規表現で試みてみたのですが、どうもWordでは書式が変更されてしまうので、断念しました。

id:Nigitama

ありがとうございます。

土日はちょっと出ていたのでオープンできませんでした。

ざっと見る限り「そのまんま」の処理をマクロで処理しているようですね。

(「そのまんま」というのは悪い意味ではありませんよ)

どのような方法でも結果がでればよいですし、

マクロで組めれば柔軟性がありますのでいろいろと幅が広がります。

とりあえず今夜は時間がありませんので、

12/1 移行に実際にためしてから また追記いたします。

取り急ぎオープンしましたという通知まで。

2008/11/30 23:47:48
id:kiki44 No.2

kiki44回答回数64ベストアンサー獲得回数02008/12/05 18:44:54

id:Nigitama

スパムですね、わかります><

2008/12/05 18:50:11
  • id:airplant
    #1の回答をした者です。
    >RTF ファイル対応 (書式を表示できる) のアプリケーションで、正規表現の前方一致(不一致)や後方一致(不一致)が使えるものを教えてください。

    最初の上記の質問を忘れていました。すみません。
    Macでは、リッチ+正規表現は比較的あるのですが、Windows対応はほとんどなさそうですね。
    なお、検索だけならWord+正規表現ライブラリでできますが、置換えもするとなるとリッチテキスト情報は失われてしまうようです。
    で、あまり汎用性はありませんが、最終的に行いたいと言われた内容をそのままマクロで実現してみました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません