【问题标题】:Regex with exception for words正则表达式,单词例外
【发布时间】:2021-09-27 20:10:18
【问题描述】:

大家好,我正在尝试将文本拆分为句子,为此,我正在使用正则表达式逻辑来拆分空格和空格。

文本文件由“先生”、“美国”组成和“英国”哪些是我不想将文本拆分成句子的字母。

我正在使用的正则表达式可以在附图中看到 *

这可以完成工作,但会产生问题。

这里的正则表达式在“我的名字是艾西瓦娅先生。”这句话中选择“a.”。我怎样才能将它改为只选择“。”?

【问题讨论】:

  • 您应该使用括号进行分组,而不是方括号\b(?:U\.[SK]|Mr)\. 结果你想要什么?

标签: r regex regex-negation


【解决方案1】:

你可以使用

\b(?:Mr|U\.S|U\.K)\.(*SKIP)(*F)|\.\s+
# A shrunk version:
\b(?:Mr|U\.[SK])\.(*SKIP)(*F)|\.\s+

请参阅regex demo详情

  • \b(?:Mr|U\.S|U\.K)\.(*SKIP)(*F) - 一个完整的单词 Mr., U.S., U.K. 匹配,跳过匹配,从失败位置开始搜索下一个匹配
  • | - 或
  • \.\s+ - .,然后是一个或多个空格。

查看R demo

x <- "My name is Mr. Aishwarya. I live in the U.K. and want to go to U.S. Us will go to Australi. Who else wants to go to U.S.A. ? My wife's name is Ruchika Bhatt. "
strsplit(x, "\\b(?:Mr|U\\.S|U\\.K)\\.(*SKIP)(*F)|\\.\\s+", perl=TRUE)

输出:

[[1]]
[1] "My name is Mr. Aishwarya"                                        
[2] "I live in the U.K. and want to go to U.S. Us will go to Australi"
[3] "Who else wants to go to U.S.A"                                   
[4] "? My wife's name is Ruchika Bhatt"  

【讨论】:

    【解决方案2】:

    您尝试的模式是negated character class[^U.S|U.K.|Mr.],因为它以^ 开头并匹配除所列字符之外的任何字符。

    也可以写成[^.US|KMr](\.\s),之所以匹配a. 是因为a没有在字符类中列出。

    你想要的是一个带有括号 () 和一个管道 | 的分组机制来分隔备选方案。


    另一种选择是使用否定的lookbehind,在匹配点和空格之前,在左侧断言不是U.S U.KMr,前面是单词边界。

    (?<!\bU\.[SK]|\bMr)\.\s
    

    模式匹配:

    • (?&lt;! 负向后看,断言左边的不是
      • \bU\.[SK] 匹配美国或英国
      • |或者
      • \bMr匹配先生
    • ) 近距离观察
    • \.\s 匹配一个点和一个空格字符(或使用\h 不匹配换行符,只匹配一个空格)

    Regex demo

    在 R 中为 Perl 兼容的正则表达式设置 perl=TRUE:

    strsplit(
        "My name is Mr. Aishwarya. I live in the U.K. and want to go to U.S. Us will go to Australi. Who else wants to go to U.S.A. ? My wife's name is Ruchika Bhatt. ",
        "(?<!\\bU\\.[SK]|\\bMr)\\.\\s",
        perl=TRUE
    )
    

    输出

    [[1]]
    [1] "My name is Mr. Aishwarya"                                        
    [2] "I live in the U.K. and want to go to U.S. Us will go to Australi"
    [3] "Who else wants to go to U.S.A"                                   
    [4] "? My wife's name is Ruchika Bhatt"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      相关资源
      最近更新 更多