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

Java正则表达式处理

东郭和光
2023-03-14

寻找一个java正则表达式函数,如果数组元素列表中的特殊字符出现在前面或后面,则返回true

2-返回False如果任何alpha字符之前和之后从我的数组元素列表我的数组元素wordsList={"TIN","tin"}输入:

1-CardTIN是1111 2-Card-TIN:2222 3-cardtinis3334-Card@TIN@4444 5-CardTIN@55556-TINis9999

预期产出:

1-正确2-正确3-错误4-正确5-正确6-错误

我尝试了正则表达式来处理这些案子

数组。流(wordsList)。任意匹配(单词)-

但情况是CardTin@555没有达到预期的效果

请帮忙处理这些案子

共有2个答案

梁丘俊材
2023-03-14

我不确定你的要求是否可以放在正则表达式中。如果有的话,你正在进入一些很难维持的专业领域。

因此,最好使用lexer/scanner组合,它通常构成一个完整的解析器。看看ANTLR。

冯澄邈
2023-03-14

可以确保不存在tin或使用字符类的tin:

^(?![a-zA-Z0-9]*(?:TIN|tin)[a-zA-Z0-9]*$).*(?:TIN|tin).*
  • (?i)不区分大小写的匹配

您可以添加单词边界\\b(?:TIN | TIN)\\b以获得更精确的匹配。

正则表达式演示

单行示例:

String s = "CardTIN is 1111";
String[] wordsList = {"TIN","tin"};
String alt = "(?:" + String.join("|", wordsList) + ")";
String regex = "(?i)^(?![a-zA-Z0-9]*" + alt + "[a-zA-Z0-9]*$).*" + alt + ".*";
System.out.println(s.matches(regex)); 

输出

true

您还可以加入|上的单词列表,然后过滤列表:

String strings[] = { "CardTIN is 1111", "Card-TIN:2222", "CardTINis3333", "Card@TIN@4444", "CardTIN@5555", "TINis9999", "test", "Card Tin is 1111" };
String[] wordsList = {"TIN","tin"};
String alt = "(?:" + String.join("|", wordsList) + ")";
String regex = "(?i)^(?![a-zA-Z0-9]*" + alt + "[a-zA-Z0-9]*$).*" + alt + ".*";
List<String> result = Arrays.stream(strings)
        .filter(word -> word.matches(regex))
        .collect(Collectors.toList());

for (String res : result)
    System.out.println(res); 

输出

CardTIN is 1111
Card-TIN:2222
Card@TIN@4444
CardTIN@5555
Card Tin is 1111

请看Java演示。

 类似资料:
  • 问题内容: 我正在尝试输入之间的内容,我的模式没有做正确的事,请帮忙。 下面是sudocode: 要求的输出: 之一 二 三 问题答案: 先行使用并在循环中使用,而不是: 看到它在线上工作:ideone 但是最好在这里使用split: 看到它在线上工作:ideone

  • 主要内容:正则表达式支持字符正则表达式(Regular Expression)又称正规表示法、常规表示法,在代码中常简写为 regex、regexp 或 RE,它是计算机科学的一个概念。 正则表达式是一个强大的字符串处理工具,可以对字符串进行查找、提取、分割、替换等操作,是一种可以用于模式匹配和替换的规范。一个正则表达式就是由普通的字符(如字符 a~z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的

  • 我正在尝试使用python中的正则表达式。我构建了正则表达式,如下所示。我知道用于匹配搜索字符串的开头。我已使用包含多个的匹配模式构建框架,但我不确定将如何尝试匹配搜索字符串中的模式。 我预计会引发错误,关于无效的正则表达式,但它不会引发任何错误,也不会返回任何匹配项。 所以,我的问题是或是有效的正则表达式吗?

  • 问题内容: 我需要这件事的帮助。查看以下正则表达式: 我想查找这样的词:“自制”,“ aaaa-bbb”而不是“ aaa-bbb”,而 不是 “ aaa–aa–aaa”。基本上,我想要以下内容: 单词-连字符-单词。 它适用于所有内容,但该模式会通过:“ aaa–aaa–aaa”,但不应通过。哪种正则表达式适用于此模式? 问题答案: 可以从表达式中删除反斜杠: 下面的代码应该工作 请注意,您可以使

  • 问题内容: 用java 方法剥离输入的字符串(如MY-CORP \ My.Name)中的MY-CORP \部分的正则表达式是什么,这样我只能得到My.Name部分? 我试过了 但是我 在索引4 ^附近 遇到了 意外的内部错误。 * 问题答案: 您的问题是反斜杠在Java字符串和正则表达式中都有特殊含义。因此,您需要在Java源代码中使用四个斜杠,将两个斜杠传递给regex解析器以在regex中获得

  • 问题内容: 我有一个字符串: 我想在所有运算符上拆分字符串,但将运算符包括在数组中,因此结果数组如下所示: 我目前有这个: 这非常接近,它给出: 我有什么办法使多个字符运算符像我希望的那样出现在数组中? 作为不那么重要的第二个问题,正则表达式中是否有办法从字母周围修剪空格? 问题答案: 这应该做。一切都很好地存储在中。