C# 带量词的正则表达式负查找

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>

我正在尝试更正一些OCR错误,我需要将
'
(双峰)替换为
(引号)。我正在使用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)