c# - c# regex 用于重复多次的字符串
问题描述
我想对输出如下的字符串有一个正则表达式:
CP_RENOUNCEABLE
CP_RIGHTS_OFFER_TYP
CP_SELLER_FEED_SOURCE
CP_SELLER_ID_BB_GLOBAL
CP_PX
CP_RATIO
CP_RECLASS_TYP
我尝试将正则表达式与字符串模式 = @"ISNULL(*)";
string strSearch = @"
LTRIM(RTRIM(ISNULL(CP_RENOUNCEABLE,'x2x'))), ISNULL(CP_RIGHTS_OFFER_TYP,-1), LTRIM(RTRIM(ISNULL(CP_SELLER_FEED_SOURCE,'x2x'))),
LTRIM(RTRIM(ISNULL(CP_SELLER_ID_BB_GLOBAL,'x2x'))),ISNULL(CP_PX,-1), ISNULL(CP_RATIO,-1), ISNULL(CP_RECLASS_TYP,-1);
string pattern = @"ISNULL(*\)";
foreach (Match match in Regex.Matches(strSearch, pattern))
{
if (match.Success && match.Groups.Count > 0)
{
var text = match.Groups[1].Value;
}
}
解决方案
我的猜测是,我们在问题中列出的所需输出之后会有一个逗号,那么这个简单的表达式可能就足够了,
(CP_[A-Z_]+),
演示 1
如果我的猜测不正确,并且之后会有其他字符(例如空格),我们可以在捕获组的右侧添加一个 char 类,例如:
(CP_[A-Z_]+)[,\s]
我们将添加任何可能出现在我们想要的字符串之后的字符[,\s]
。
演示 2
测试
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"(CP_[A-Z_]+),";
string input = @"LTRIM(RTRIM(ISNULL(CP_RENOUNCEABLE,'x2x'))), ISNULL(CP_RIGHTS_OFFER_TYP,-1), LTRIM(RTRIM(ISNULL(CP_SELLER_FEED_SOURCE,'x2x'))),
LTRIM(RTRIM(ISNULL(CP_SELLER_ID_BB_GLOBAL,'x2x'))),ISNULL(CP_PX,-1), ISNULL(CP_RATIO,-1), ISNULL(CP_RECLASS_TYP,-1);";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
编辑:
为了捕获介于ISNULL
和第一个逗号之间的内容,这可能有效:
ISNULL\((.+?),
演示 3
推荐阅读
- java - 使用 BrokeredMessage 消息在 Java 中使用 Azure 队列消息。getBody() 返回一些头信息,如何摆脱它?
- keras - Keras:使用铰链或分类铰链实现 SVM?
- python - 保留第一个非零元素,将所有其他元素设置为 0
- r - ggplot绘制多个条形图
- javascript - 从 html 按钮执行 api 调用...如何
- javascript - Chrome extensions get information from the webpage
- mysql - 使用 SQL 对二叉树节点进行分类
- java - 从 5.2.12 升级到休眠 5.3.4 后,休眠的 ColumnTransformer 停止工作
- maven - 在 Maven 项目中,在编译时在本地 jar 文件中找到了一个类,但在运行时没有。为什么?
- nlp - 从文本列表或正文中提取重复的子字符串