C# 带量词的正则表达式负查找
我正在尝试更正一些OCR错误,我需要将C# 带量词的正则表达式负查找,c#,regex,C#,Regex,我正在尝试更正一些OCR错误,我需要将'(双峰)替换为”(引号)。我正在使用SubtitEdit(我想它使用C#Regex) 我每次都需要匹配”,但不是在这种情况下: some text 'undefined length phrase/phrases'' 第一个”前面应该是空白,后面应该是\w 基本上我想匹配',如果前面没有\s'\w.*。 在本例中: ''E poi disse: 'Ne voglio un po'', ed andò via.'' 我想匹配第一个和最后一个 '/COD>
'
(双峰)替换为”
(引号)。我正在使用SubtitEdit(我想它使用C#Regex)
我每次都需要匹配”
,但不是在这种情况下:
some text 'undefined length phrase/phrases''
第一个”
前面应该是空白,后面应该是\w
基本上我想匹配'
,如果前面没有\s'\w.*
。
在本例中:
''E poi disse: 'Ne voglio un po'', ed andò via.''
我想匹配第一个和最后一个<代码> '/COD>但不是中间的那个,因为它前面有“代码>”No.VoGuoun-Po</C>
我试过了,但它不起作用,因为量词不能在lookback中使用。这个表达式非常有趣,我们将添加一个右侧边界,我们可能从一个表达式开始,例如:
\s'.+?\w'[^']
如果我们有其他实例,我们肯定可以使用其他约束来扩展此表达式,例如:
\s'[^']+?\w'[^']
或
您可以将它们作为分隔符进行匹配。
在您的例子中,您希望匹配的是作为2个分隔符的
'
就是这样做的
查找('')(((?:(?:(?!'[^']*'')[\S\S])*(?:'[^']*'))*)('')
更换
“$2”
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
如果上述方法对您无效,您可以删除第一个(“”)
,然后运行它 更新-另外,将中间部分添加到末端,以便对称覆盖
结束条件 注意这个警告:一个字符串只包含
'Ne voglio un po'
将转换为
'Ne voglio un po“
这就是不使用平衡分隔符时发生的情况 查找:
((?:(?:(?!”[^']*”)*(?:“[^']*”)*)(((?:(?:(?!”[^']*)*)((?:(?:(?!”[^']*)*(?:“[^']*)*)
替换:
$1“$3
扩大
( # (1 start)
(?:
(?:
(?! '' | ' [^']* '' )
[\S\s]
)*
(?: ' [^']* '' )?
)*
) # (1 end)
( '' ) # (2)
( # (3 start)
(?:
(?:
(?! '' | ' [^']* '' )
[\S\s]
)*
(?: ' [^']* '' )?
)*
) # (3 end)
我决定使用3正则表达式解决方案
因此,您需要
(?参见“不在这种情况下”这种情况的定义有多精确?您只给出了一个可以以多种不同方式解释的示例。据我所知,您希望替换“”
,除非这些“”
是文本字符串中的最后两个字符。(换句话说,您要替换不后跟文本结尾的'
。或者换言之:您要替换后跟某个字符的'
。)我想匹配“”,如果它前面没有\s'\w.*实际上我想匹配“”。我更新了原始帖子以使其更清晰。这是迄今为止最好的解决方案,但如果第一个“”不存在,它就不起作用。@TeodorPatriche-试试我当时发布的备选方案。我想我在那里放了个屁,没有意识到你给了我备选方案。t第二个很好用!太棒了!我需要仔细想想你是怎么做到的,因为我在制作这个正则表达式时付出了很多努力。非常感谢!@TeodorPatriche-还有一个变化,你最好检查一下,还有一个警告。
( # (1 start)
(?:
(?:
(?! '' | ' [^']* '' )
[\S\s]
)*
(?: ' [^']* '' )?
)*
) # (1 end)
( '' ) # (2)
( # (3 start)
(?:
(?:
(?! '' | ' [^']* '' )
[\S\s]
)*
(?: ' [^']* '' )?
)*
) # (3 end)