当前位置: 首页 > 知识库问答 >
问题:

正则表达式负前瞻,防止最后一个字符成为连字符

闽焕
2023-03-14

我正在尝试捕获一个单词或2到30个字符之间的多个单词。这些字符可以包含 ., ', 或-。这个正则表达式实现了这一点。

[A-Za-z.'-]{2,30}

然而,有一点需要注意的是,我需要确保最后一个字符不是连字符,因为第一个匹配允许连字符,所以我尝试的负面展望似乎被推翻了。

如果有人能用一个正则表达式解决这个问题,我将不胜感激。

共有3个答案

师冥夜
2023-03-14

您可以使用以下内容。

[a-zA-Z.'-]{1,29}[a-zA-Z.']

说明:

[a-zA-Z.'-]{1,29}     # any character of: 'a' to 'z', 'A' to 'Z',
                      # '.', ''', '-' (between 1 and 29 times)

[a-zA-Z.']            # any character of: 'a' to 'z', 'A' to 'Z', '.', '''
常子濯
2023-03-14

以一种方式匹配除最后一个字符之外的所有字符,然后将最后一个字符匹配为非连字符:

[A-Za-z.'-]{1,29}[A-Za-z.']
计光赫
2023-03-14

解决这个问题的另一种方法

[A-Za-z.'-]{2,30}(?<!-)

放置负查找(?

 类似资料:
  • 我有以下示例文本 当我应用以下正则表达式时,当我打印第一个捕获组时,我期望以下输出 但是我最终得到的是 在我看来,由于某种原因,否定的先行部分被忽略了,因此正则表达式与整个字符串匹配。 真正让我困惑的是,积极的前瞻性正如我所期望的那样工作。例如,使用在打印第一个捕获组时返回以下内容 这是有道理的,所以我真的很困惑为什么消极的前瞻性没有正常运作。

  • 问题内容: 我正在尝试对Elasticsearch查询进行否定前瞻,正则表达式为: 我要匹配的文本是: 归还了住宿费用,但仍存在建筑问题。喷洒化学药品会引起健康问题,并引起眼睛刺激。 我没有任何幸运。有人可以帮忙吗? ES查询: 问题答案: 您可以使用以下两种方法之一来解决此问题: 要么 带可选的(因为 默认情况下 为ON ) 它是如何工作的? 在常见的NFA正则表达式中,通常会有负面的环顾四周,

  • 这工作正常,所以如果歌曲名称是这是*名称,它将创建别名。但是,如果名称在开头或结尾有特殊字符它将创建 - 在两端创建连字符。

  • 我试图使用正则表达式来检查字符串中的第一个和最后一个字符是否是a-z之间的字母字符。 我知道这与第一个字符匹配: 但是我如何检查最后一个字符呢? 这: 不起作用。我怀疑这两个条款之间应该有什么区别,但我不知道是什么!

  • 我目前正在玩正则表达式,试图更好地理解它们,并且有一个我现在似乎正在努力的场景,因为我不知道这是否可以通过正则表达式来实现。 我有这样的文本字符串 该清单可能仍在进行中。我想匹配(选择)内部关键字之间的空格。因此,在第二行中,它将是和之间的空格。 和我能够匹配关键字中包含多个单词的行。将第一部分<代码>( 编辑:假设这些行之间还有一些其他文本,所以简单的< code>\b不能作为正则表达式使用。

  • 我需要根据给定条件验证输入, -总长度必须为20个字符-前五个位置必须是字母-剩余的应该是数字,但必须存在一个连字符(-),该连字符只能出现在数字之间。我喜欢正则表达式 但它也允许在结尾使用连字符,甚至可以不使用连字符。