Regex 如何找到一个后跟数字的特定字符串,该字符串之间有任意数量的字符?
我正在尝试为以下模式编写正则表达式: [MyLiteralString][0个或多个字符(不受限制)[至少1位] 我想这应该可以做到:Regex 如何找到一个后跟数字的特定字符串,该字符串之间有任意数量的字符?,regex,Regex,我正在尝试为以下模式编写正则表达式: [MyLiteralString][0个或多个字符(不受限制)[至少1位] 我想这应该可以做到: (theColumnName)[\s\S]*[\d]+ 当它查找文本字符串时,列名,后跟任意数量的字符(空格或其他),然后至少是一个数字。但这比我想要的要多,你可以在这里看到: (编辑)第二组更复杂的数据- 使用该链接中的示例数据,我希望正则表达式能够识别两次出现的theColumnName]VARCHAR(10),仅此而已 我有300多个sql脚本,其中包
(theColumnName)[\s\S]*[\d]+
当它查找文本字符串时,列名
,后跟任意数量的字符(空格或其他),然后至少是一个数字。但这比我想要的要多,你可以在这里看到:
(编辑)第二组更复杂的数据-
使用该链接中的示例数据,我希望正则表达式能够识别两次出现的theColumnName]VARCHAR(10)
,仅此而已
我有300多个sql脚本,其中包含每种类型的数据库对象的create语句:过程、表、触发器、索引、函数——一切。正因为如此,我对正则表达式不能太严格
存储过程的文件可能包括我想要识别的LEFT(columnname,10)
之类的文本
CREATETABLE语句类似于columnname VARCHAR(12)
因此,它需要非常灵活,因为数字并不总是相同的。有时候是10,有时候是12,有时候是51——各种各样的数字
基本上,我在寻找这个C代码的正则表达式等价物:
这将使它在看到第一个数字后停止捕获
*
和*?
之间的区别在于贪婪与懒惰<例如,code>*\d将匹配abcd12ad4
中的abcd12ad4
,而*?\d
将其第一个匹配项设置为abcd1
。查看更多信息
顺便说一句,如果您不想匹配换行符,请使用
(句点)而不是[\s\s]
这将使它在看到第一个数字后停止捕获
*
和*?
之间的区别在于贪婪与懒惰<例如,code>*\d将匹配abcd12ad4
中的abcd12ad4
,而*?\d
将其第一个匹配项设置为abcd1
。查看更多信息
顺便说一句,如果您不想匹配换行符,请使用
(句点)而不是[\s\s]
//Get file data
string[] lines = File.ReadAllLines(filePath);
//Let's assume the first line contains 'theColumnName'
int theColumnNameIndex = lines[0].IndexOf("theColumnName");
if (theColumnNameIndex >= 0)
{
//Get the text proceeding 'theColumnName'
string temp = lines[0].Remove(0, theColumnNameIndex + "theColumnNameIndex".Length;
//Iterate over our substring
foreach (char c in temp)
{
if (Char.IsDigit(c))
//do a thing
}
}
(theColumnName).*?[\d]+