我需要一个正则表达式来匹配字符串,但从字符串中排除特定的单词。例如
dfm HSBC12323 我需要提取
HSBC12323 并且不包括dfm。如果字符串HSBC12323需要按原样匹配,因为dfm可能不存在。
如果字符串dfm123213我需要匹配123213 adx 212321,我需要匹配212321,而不是adx adx hsbc123uy,我需要匹配hsbc123uy hsbc1237,我需要按原样匹配它。
(?<!dfm\s*?|adx\s*?|\w)\d+但它并不像我想的那样工作
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发布于 2019-06-18 22:50:43
如果左边不是dfm或adx,或者不是单词字符,那么您的模式(?<!dfm\s*?|adx\s*?|\w)\d+将匹配1+数字,在前2个字符之后可以有空格字符。您不必使s*?不贪婪,因为它不能匹配以下数字的\d+
在您的所有示例中,这不会匹配,因为在所有示例之前,当前2个不匹配时,\w可以在数字之前匹配。例如,$22将会匹配。
匹配您的值的一种选择可以是结合使用正向后视和负向前视的交替。
(?<=\b(?:dfm|adx) *)\w+|\b(?!(?:dfm|adx))\w+说明
(?<=正向回溯,断言\b(?:dfm|adx) *字左边界上的内容,匹配dfm或adx,后跟space的0+倍
关闭正向匹配
) word chars| Or\b Word boundary(?!负向前视,断言右边的内容不是(?:dfm|adx)匹配dfm或adx1+
) Close negative lookahead\w+ Match 1+ word characters查看.NET regex demo
如果匹配后不应该跟非空格字符,也可以在匹配\w+之后添加(?!\S)。
发布于 2019-06-18 22:53:27
我的猜测是,使用这个表达式或类似的表达式,我们可以一步一步地捕获我们想要的东西,然后我们甚至可以用额外的约束来增强我们的表达式,只是为了安全起见:
(?=dfm\s+|adx\s+)(?:dfm\s+([A-Z0-9]+)|adx\s+([0-9]+))|(?=dfm)dfm([0-9]+)|[A-Za-z0-9]+测试
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可视化正则表达式:

https://stackoverflow.com/questions/56651353
复制相似问题