用标点符号换行的匹配字段,但不是单个撇号
本文关键字:单个撇 字段 换行 标点符号 | 更新日期: 2023-09-27 18:31:26
我有以下Regex
用于翻译 SQL 字符串中的字段
string posLookBehind = @"(?<='p{P}*)'b";
string posLookAhead = @"'b(?='p{P}*)";
string keyword = "FieldA";
string translatedKeyword = "FldA";
string strSql = "SELECT [FieldA] FROM SomeTableA;";
strSql = Regex.Replace(
strSql,
baseRegexLeft + keyword + baseRegexRight,
translatedKeyword,
RegexOptions.IgnoreCase);
对于某些关键字FieldA
,上面的正则表达式会在以下每个关键字中将"FieldA"替换为"FldA":[FieldA]
,[FieldA + FieldB]
等。但是,我现在希望限制正则表达式。我不想匹配 'FieldA'
注意单个撇号。
因此,我使用正则表达式减法更改了正则表达式,以从标点符号集中删除'
:
string posLookBehind = @"(?<=['p{P}-[']]*)'b";
string posLookAhead = @"'b(?=['p{P}-[']]*)";
其中其他代码相同。但这仍然符合'FieldA'
.我在这里做错了什么?
谢谢你的时间。
我认为这背后的原因是后面和前看中的星*
,因为它匹配零或更多,所以在匹配FieldA
它自己之后,它会检查后面是否有零个或多个标点符号不是撇号,但由于有一个撇号,它只匹配零次。
您可以通过将星号更改为加号+
来解决此问题:
string posLookBehind = @"(?<=['p{P}-[']]+)'b";
string posLookAhead = @"'b(?=['p{P}-[']]+)";
或者,如果始终只有一个周围字符,则:
string posLookBehind = @"(?<=['p{P}-[']])'b";
string posLookAhead = @"'b(?=['p{P}-[']])";