首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配字符串,但不匹配特定的单词

匹配字符串,但不匹配特定的单词
EN

Stack Overflow用户
提问于 2019-06-18 22:25:17
回答 2查看 90关注 0票数 0

我需要一个正则表达式来匹配字符串,但从字符串中排除特定的单词。例如

代码语言:javascript
复制
dfm HSBC12323 

我需要提取

代码语言:javascript
复制
HSBC12323 

并且不包括dfm。如果字符串HSBC12323需要按原样匹配,因为dfm可能不存在。

如果字符串dfm123213我需要匹配123213 adx 212321,我需要匹配212321,而不是adx adx hsbc123uy,我需要匹配hsbc123uy hsbc1237,我需要按原样匹配它。

代码语言:javascript
复制
(?<!dfm\s*?|adx\s*?|\w)\d+

但它并不像我想的那样工作

代码语言:javascript
复制
Actual string : dfm HSBC12323  excpected HSBC12323 
Actual string : HSBC12323  expected HSBC12323 
Actual string : dfm123213 expected 123213
Actual string : adx 212321 expected 212321 
Actual string : usa1237 expected usa1237
EN

回答 2

Stack Overflow用户

发布于 2019-06-18 22:50:43

如果左边不是dfm或adx,或者不是单词字符,那么您的模式(?<!dfm\s*?|adx\s*?|\w)\d+将匹配1+数字,在前2个字符之后可以有空格字符。您不必使s*?不贪婪,因为它不能匹配以下数字的\d+

在您的所有示例中,这不会匹配,因为在所有示例之前,当前2个不匹配时,\w可以在数字之前匹配。例如,$22将会匹配。

匹配您的值的一种选择可以是结合使用正向后视和负向前视的交替。

代码语言:javascript
复制
(?<=\b(?:dfm|adx) *)\w+|\b(?!(?:dfm|adx))\w+

说明

  • (?<=正向回溯,断言
    • \b(?:dfm|adx) *字左边界上的内容,匹配dfm或adx,后跟space

的0+倍

关闭正向匹配

  • ) word chars
  • | Or
  • \b Word boundary
  • (?!负向前视,断言右边的内容不是
    • (?:dfm|adx)匹配dfm或adx

1+

  • ) Close negative lookahead
  • \w+ Match 1+ word characters

查看.NET regex demo

如果匹配后不应该跟非空格字符,也可以在匹配\w+之后添加(?!\S)

票数 0
EN

Stack Overflow用户

发布于 2019-06-18 22:53:27

我的猜测是,使用这个表达式或类似的表达式,我们可以一步一步地捕获我们想要的东西,然后我们甚至可以用额外的约束来增强我们的表达式,只是为了安全起见:

代码语言:javascript
复制
(?=dfm\s+|adx\s+)(?:dfm\s+([A-Z0-9]+)|adx\s+([0-9]+))|(?=dfm)dfm([0-9]+)|[A-Za-z0-9]+

Demo

测试

代码语言:javascript
复制
using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"(?=dfm\s+|adx\s+)(?:dfm\s+([A-Z0-9]+)|adx\s+([0-9]+))|(?=dfm)dfm([0-9]+)|[A-Za-z0-9]+";
        string input = @"dfm HSBC12323
HSBC12323
dfm123213
adx 212321
usa1237";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}

RegEx电路

jex.im可视化正则表达式:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56651353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档