簡體   English   中英

R正則表達式刪除了apostroph,除了之前和之后的字母

[英]R regex remove apostroph except the ones preceded and followed by letter

我正在清理文本,我想刪除任何撇號,除了之前和之后的字母,如:我是,我會,他......等等。

我有以下初步解決方案,處理很多案例,但我想要一個更好的案例:

rmAps <- function(x) gsub("^\'+| \'+|\'+ |[^[:alpha:]]\'+(a-z)*|\\b\'*$", " ", x)

rmAps("'i'm '' ' 'we end' '")
[1] " i'm   we end  "

我也嘗試過:

(?<![a-z])'(?![a-z])

但我想我仍然想念......

gsub("'(?!\\w)|(?<!\\w)'", "", x, perl = TRUE)
#[1] "i'm   we end "

刪除角色后面沒有單詞字符的情況: '(?!\\\\w)

刪除角色前面沒有單詞字符的情況: (?<!\\\\w)'

如果出現上述任何一種情況,你想要刪除它,所以'(?!\\\\w)|(?<!\\\\w)'應該可以解決問題。 請注意, \\\\w包含下划線,並根據需要進行調整。


另一種選擇是

gsub("\\w'\\w(*SKIP)(*FAIL)|'", "", x, perl = TRUE)

在這種情況下,您匹配'被單詞字符包圍的任何實例: \\\\w'\\\\w ,然后強制該匹配失敗(*SKIP)(*FAIL) 但是,也要尋找'使用|' 結果是只會出現'未包裝在單詞字符中”並將其替換掉的情況。

您可以使用以下正則表達式:

(?<=\w)'(?=\w)
  • (?<=)是一個積極的看法。 內部的所有內容需要在下一個選擇器之前匹配
  • (?=)是一個積極的前瞻。 內部的所有內容都需要在前一個選擇器之后匹配
  • \\w任何字母數字字符和下划線

如果要限制結果,也可以將\\w切換到例如[a-zA-Z]

→以下是regex101上用於實時測試的示例。

暫無
暫無

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

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