2016-09-05 10 views
3

文にマッチする正規表現を作成しようとしています。ルアで文をマッチさせる方法

ここにスニペットがあります。

local utf8 = require 'lua-utf8' 
function matchsent(text) 
    local text = text 
    for sent in utf8.gmatch(text, "[^\r\n]+\.[\r\n ]") do 
    print(sent) 
    print('-----') 
    end 
end 

ただし、pythonのようには機能しません。私はルアが正規表現のパターンの異なるセットを使用していることを知っていると正規表現の能力は限られているが、上記の正規表現は私に構文エラーを与えるのはなぜですか?そして、Luaの正規表現にマッチする文章はどのように見えるでしょうか?

+1

。 –

答えて

2

Luaは、通常の言語とは一致しないため、「通常の」表現ではないLuaパターンを使用することに注意してください。さまざまな略語、スペーシング、ケースなどを考慮する必要があるため、テキストを文に分割することはほとんどできません。テキストを文に分割するには、複雑さのために1つまたは2つの正規表現ではなくNLPパッケージが必要です。タスク。

について、なぜ上記の正規表現は私に構文エラーを与えるのでしょうか?

あなたはLuaのパターン%記号と特殊記号をエスケープする必要があります。サンプルコードを参照してください。

function matchsent(text) 
    for sent in string.gmatch(text, '[^\r\n]+%.[\r\n ]') do 
     print(sent) 
     print("---") 
    end 
end 
matchsent("Some text here.\nShow me") 

online demoあなたは特殊記号をエスケープするために `%`を使用する必要が

+0

うん、それはうまくいくが、「ボン博士は木に隠れていた」それは間違って分割されます。 – minerals

+1

Luaパターンは正規表現ではなく、デフォルトでは文章を略語とマッチさせることができないことに注意してください。あなたは '%。%s +(%u)'のようなものを使い、 '.§%1'と置き換えて' '^^ '+' 'と' gmatch'を使って "しかし、それは 'を伝えることができないので、おおよそのものになります。 'からの新しい文章。ボン博士。 https://ideone.com/rvzAtXを参照してください。 LuaのようにPython '(?:(Dr:Mrs)\。| [^ \ r \ n。])+ \。'のようなPython 'は何も使用できませんので注意してください。 –

+0

はい、文のトークン化はそれ自身で別々のトピックですが、私はちょうど近似的なpythonの正規表現で取り除くことができます。 – minerals

関連する問題