我使用正則表達式來匹配包含特定字符串的文本中的整個句子。只要句子以任何類型的標點符號結束,這就工作得很好。但是,當句子在文本的末尾沒有任何標點符號時,它不起作用。正則表達式匹配到文本結尾
這是我目前的表現:
[^.?!]*(?<=[.?\s!])string(?=[\s.?!])[^.?!]*[.?!]
作品爲:
這是串一個句子。更多文字。
更多的文字:
不適合工作。這是串
一個句子有沒有什麼辦法,使這個詞作爲意圖?我找不到任何「文字結尾」的字符類。
我使用正則表達式來匹配包含特定字符串的文本中的整個句子。只要句子以任何類型的標點符號結束,這就工作得很好。但是,當句子在文本的末尾沒有任何標點符號時,它不起作用。正則表達式匹配到文本結尾
這是我目前的表現:
[^.?!]*(?<=[.?\s!])string(?=[\s.?!])[^.?!]*[.?!]
作品爲:
這是串一個句子。更多文字。
更多的文字:
不適合工作。這是串
一個句子有沒有什麼辦法,使這個詞作爲意圖?我找不到任何「文字結尾」的字符類。
文本的末尾由錨點$
匹配,而不是字符類。
你有兩個問題需要解決:(1)這句話後直接串結束,和(2)句子後串但與最終的句子沒有標點符號的某個時候結束。
要做到這一點,您需要在string
可選之後進行匹配,但將匹配的字符串錨定到字符串的末尾。這也意味着,在您識別出(可選)句尾標點符號後,您需要匹配後面的所有內容,以便字符串末尾的錨點匹配。
我的變化:採取一切string
後,原來的正則表達式,並圍繞着它在(?:...)?
- 在(?:...)
是一個「非記憶」組,?
使整個組可選。按照$
來固定字符串的末尾。
在這一可選的組,你也需要做出最終的句子本身可選的,由簡單[.?!]
與(?:[.?!].*)?
代替 - 當然,在(?:...)
是做一個「非記憶」組中,?
使組可選 - 並且.*
允許在找到句子結尾後儘可能匹配。
[^.?!]*(?<=[.?\s!])string(?:(?=[\s.?!])[^.?!]*(?:[.?!].*)?)?$
文本結尾的符號是$
(並且,如果您需要,文本開始符號爲^
)。
您可能不會通過將$
添加到標點符號列表中來獲得所需內容(例如,[.?!$]
);你會發現它可以更好地作爲替代選擇:([.?!]|$)
。
你的正則表達式對於你想實現的過於複雜。
只匹配一個詞,僅僅用
"\bstring\b"
它將匹配起點,終點和任何非alphanum分隔符。
它適用於以下:
string is at the start
this is the end string
this is a string.
stringing won't match (you don't want a match here)
你應該在這個問題添加的語言,瞭解更多有關使用。
這裏是我的例子中使用javascript:
var reg = /^([\w\s\.]*)string([\w\s\.]*)$/;
console.log(reg.test('This is a sentence with string. More text.'));
console.log(reg.test('More text. This is a sentence with string'));
console.log(reg.test('string'))
注:
*
:匹配零次或更多次。
? :匹配零次或一次。
+
:匹配一次或多次。你可以用*
更換嗎?或者+如果你想要更多的定義。