【问题标题】:Regex to match first word in sentence正则表达式匹配句子中的第一个单词
【发布时间】:2013-01-23 21:28:36
【问题描述】:

我正在寻找一个匹配句子中第一个单词的正则表达式,不包括标点符号和空格。例如:“This is a sentence”中的“This”。和“首先,我想说“你好!”中的“第一”

这不起作用:

"""([A-Z].*?(?=^[A-Za-z]))""".r

【问题讨论】:

  • 这是什么风格的正则表达式?
  • 单词中可以有数字吗?
  • ([a-z]+),不区分大小写,对于“简单”的英语应该足够了。但是,对于非拉丁字符,它很快就会失败 - 所以适当地更新为use Unicode character classes!请注意,这假设一个 NFA 正则表达式(如 Ruby :D)将“匹配它可以匹配的第一件事”,但这在这里很有用,因为不需要锚定或其他复杂的环视。
  • 句子的开头或字符串的开头,就像你的例子一样?什么是关于例如“这不是个好主意!”或“Fürchterlichéß Beispiel”。 (只是一个例子!)?

标签: regex text-segmentation


【解决方案1】:
[a-z]+

这应该足够了,因为它将获取第一个 a-z 字符(假设不区分大小写)。

如果不起作用,您可以尝试[a-z]+\b,甚至^[a-z]\b,但最后一个假设字符串以单词开头。

【讨论】:

    【解决方案2】:
    (?:^|(?:[.!?]\s))(\w+)
    

    将匹配每个句子中的第一个单词。

    http://rubular.com/r/rJtPbvUEwx

    【讨论】:

    • 编辑了我的帖子。很好的收获。
    • "123 This doesn't work" 因为它将返回 "123" 而不是 "This"
    • 那是因为那是第一个字。就像OP问的那样。如果您希望它匹配第一个字典单词,那么您应该寻找除正则表达式之外的其他地方。
    • 请您解释一下 (\w+) 之前的所有内容吗?
    【解决方案3】:

    您可以使用这个正则表达式:^\s*([a-zA-Z0-9]+)

    第一个单词可以在捕获的组中找到。

    【讨论】:

      【解决方案4】:

      您可以使用此正则表达式:^[^\s]+^[^ ]+

      【讨论】:

        【解决方案5】:

        这是一个旧线程,但人们可能会像我一样需要它。 如果您的句子以一个或多个空格开头,则上述方法均无效。 我这样做是为了得到句子中的第一个(非空)单词:

        (?<=^[\s"']*)(\w+)
        

        解释:

        (?&lt;=^[\s"']*) 正向查找以查找字符串的开头,后跟零个或多个空格或标点符号(您可以在括号之间添加更多),但不要将其包含在匹配项中。
        (\w+)单词的实际匹配,将返回

        句子中的以下单词不匹配,因为它们不满足lookbehind。

        【讨论】:

          猜你喜欢
          • 2010-12-29
          • 1970-01-01
          • 1970-01-01
          • 2014-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多