簡體   English   中英

使用正則表達式拆分字符串,如何忽略撇號?

[英]Split string using regular expression, how to ignore apostrophe?

我正在用 Python 做一個拼寫檢查教程,它使用這個正則表達式:

import re
def split_line(line):
    return re.findall('[A-Za-z]+(?:\`[A-Za-z)+)?',line)

我想知道您是否可以幫助我更改此功能,使其忽略' ,即如果我輸入字符串he's我將得到['he's']而不是['he','s']

首先,您需要按Marcin所述將)替換為]來修復原始表達式。 然后只需將'添加到允許的字符列表中(以反斜杠轉義):

import re
def split_line(line):
    return re.findall('[A-Za-z\']+(?:\`[A-Za-z]+)?',line)

split_line("He's my hero")

#["He's", 'my', 'hero']

當然,這將不考慮撇號在單詞的開頭或結尾處的任何邊緣情況。

您的正則表達式應該匹配一個或多個字母,然后可選地出現一個反引號,然后再匹配一個或多個字母。 您可以將反引號放入字符類並將'添加到類中。

請注意,如果您使用雙引號字符串文字,則不需要轉義'

re.findall(r"[A-Za-z]+(?:['`][A-Za-z]+)*", line)

請參閱正則表達式演示 詳情

  • [A-Za-z]+ - 一個或多個 ASCII 字母(使用[^\\W\\d_]+匹配任何一個或多個 Unicode 字母)
  • (?:['`][A-Za-z]+)* - 零次或多次出現'或反引號,后跟一個或多個 ASCII 字母。

請參閱Python 演示

import re
text = "And he's done it o`key!"
print(re.findall(r"[A-Za-z]+(?:['`][A-Za-z]+)*", text))
# => ['And', "he's", 'done', 'it', 'o`key']

暫無
暫無

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

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