簡體   English   中英

正則表達式:句子的第一個單詞(緊隨其他句子后加上未知的標點符號)

[英]Regex: First word of sentence (following another sentence w/ unknown punctuation)

我需要的正則表達式,將發現所有這些句子和任何類似的重復這個詞的時候

  • “就是那個。” 什么時候發生的? (以引號/或FN呼叫結束)
  • 就是這樣 什么時候發生的? (注意引號不見了)
  • 就是這樣 什么時候發生的? (注意雙倍空格)
  • 就是這樣 什么時候發生的? (注意小寫w)
  • 是這個嗎 什么時候發生的? (注意問號)

該代碼將在第一次迭代時匹配: (?<=\\.\\".)[a-zA-Z]*?(?=\\s)

我的測試程序似乎不允許我在回溯文本中使用量詞或其他修飾符,這讓我感到困惑。 例如,我可以做類似的事情:

(?<=((\.)|(\!)|(\?))\"{0,1}\s{1,2})[a-zA-Z]*?(?=\s)

我的文字問題是:

1)它似乎根本沒有處理。

2)似乎沒有任何簡單的方法可以使回溯中的量詞變得懶惰。 換句話說,即使正在處理,我也不知道它的意義(?<=((\\.)|(\\!)|(\\?))\\"{0,1}\\s{1,2}?)[a-zA-Z]*?(?=\\s)

3)我加了過多的括注的,因為我覺得它更容易閱讀,但我沒有得到結果w/w/o他們。 因此,這不是問題。 順便說一句,它們會成為問題嗎?

由於re模塊將不支持可變長度的后向查找,因此可以捕獲所需的字符串。

(?:[.!)?])\"?\s{1,2}([a-zA-Z]+)(?=\s)

演示

>>> s = '''"This is that." When did it happen? (ending in quotes/or FN call)
This is that. When did it happen? (note quotes are gone)
This is that.  When did it happen? (notice the double space)
This is that. when did it happen? (notice the lowercase w)
This is that? When did it happen? (notice the question mark)'''
>>> re.findall(r'(?:[.!)?])\"? {1,2}([a-zA-Z]+)(?=\s)', s)
['When', 'When', 'When', 'when', 'When']

由於re模塊不允許使用可變長度的lookbehind,因此您可以構建固定長度的lookbehinds的替代形式:

p = re.compile(r'(?:(?<=[.?!"]\s\s)|(?<=[.?!"]\s))[a-z]+', re.IGNORECASE)

僅僅因為您可以編寫復雜而僵硬的RegExes,並不意味着您必須;-)

使用\\w匹配單詞字符,並使用\\s*匹配任意數量的空格。

除了也匹配“開”雙引號后的第一個單詞之外,這還可以幫助您入門: (?:[.!?"]\\s*)(\\w+)

我敢肯定報價問題也可以解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM