【问题标题】:Regex - Check if expression ends with a newline正则表达式 - 检查表达式是否以换行符结尾
【发布时间】:2014-01-31 00:39:29
【问题描述】:

我正在使用表达式 [A-F]{4} 来尝试检查 unix 上名为“words”的字典文件。问题是现在它检查所有字符以找到 A-F 的四个字母组合(这意味着我可以获得与表达式匹配的单词的一部分),我需要它来仅查找与此匹配的单词。我会检查表达式后面的空格,但问题是每个单词都在一个新行上,并且后面不包含空格。

那么有没有一种方法可以检查它们是否是在我寻求与正则表达式的组合之后的换行符,就像你可以使用空格一样?

如果不存在换行的可能性并且任何人都知道一个聪明的技巧,我正在用 java 编写我的代码。

将 \b 添加到表达式中的代码:http://pastebin.com/kYqr6Ex6

【问题讨论】:

  • 您要匹配的示例字符串(或段落)是什么?
  • 这些(不知道如何格式化,所以这里也放在pastebin上:pastebin.com/CtQvSWAF): beechnut's beechnuts beef beef's beefburger 它需要匹配“牛肉”,没有一个其他的话。 (因为单词超过 4 个字符。现在(没有 \b)它是前两个单词的一部分 beec 两次,beec 三次(一次是牛肉,两次是另外两个单词的一部分)

标签: regex search newline


【解决方案1】:

您可以使用以下正则表达式(使用边框):\b[A-F]{4}\b

例子:

Pattern pattern = Pattern.compile("\\b[A-F]{4}\\b");
Matcher matcher = pattern.matcher("ABCD BCDE GHT GHJL\n" +
                                    "XSE EFAB BHUI ABCE\n");
// check all occurance
while (matcher.find()) {
    System.out.println(matcher.group());
}

输出:

ABCD
BCDE
EFAB
ABCE

Fiddler 链接:
http://rubular.com/r/lvpbG4nAYG

【讨论】:

  • 似乎仍然不起作用:/(与在文件中找到所有匹配项之前相比,没有找到任何匹配项)我可以检查换行符是否以某种方式包含边界吗?这是代码顺便说一句:pastebin.com/kYqr6Ex6 我也已将其添加到帖子中。
  • 这是正确的想法,但它不是 java 问题,它是 linux 命令行问题,所以不要加倍(即转义)反斜杠
  • 有效!我需要双斜杠(对不起,我还是正则表达式的新手)感谢 \b 的建议和示例!
  • @Bohemian 他在他使用 Java 的问题中说。
【解决方案2】:

假设每个想要的单词都以空格开头和结尾(包括制表符和换行符),您可以使用这个正则表达式:

正则表达式

[A-F]{4}(?!\S)

示例

Regex101 Permalink

【讨论】:

    【解决方案3】:

    对于 *nix 命令行工具,单词边界正则表达式是 \<\> 用于单词的开始/结束,所以试试这个正则表达式:

    [A-F]{4}\>
    

    如果您要查找整个单词,而不仅仅是单词的结尾,请添加单词 start 正则表达式:

    \<[A-F]{4}\>
    

    【讨论】:

      【解决方案4】:

      尝试在 Pattern 上使用标志 Pattern.MULTILINE 并使用正则表达式 \b[A-F]{4}\b$

      Pattern pattern = Pattern.compile("[A-F]{4}$", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
      

      Pattern.MULTILINE 处于活动状态时,$ 将与换行符匹配。

      使用RegexPlanet 进行测试,我认为它给出了您想要的结果。

      【讨论】:

        猜你喜欢
        • 2020-05-07
        • 2022-07-01
        • 1970-01-01
        • 2012-08-05
        • 1970-01-01
        • 2013-04-29
        • 1970-01-01
        • 2016-01-17
        • 1970-01-01
        相关资源
        最近更新 更多