正则表达式带有量词的否定性

时间:2019-06-07 14:13:30

标签: c# regex

我正在尝试纠正一些OCR错误,我需要将''(双尖)替换为"(引号)。我正在使用Subtitledit(我认为它使用C#正则表达式)。

我需要每次都匹配'',但在这种情况下不需要匹配:

some text 'undefined length phrase/phrases''

第一个'前应有一个空格,后跟一个\w

基本上,我想匹配'',如果前面没有\s'\w.*。 在此示例中:

''E poi disse: 'Ne voglio un po'', ed andò via.''

我要匹配第一个''和最后一个'Ne voglio un po,但不要匹配中间的那个,因为它的前面是<Field name="foo" component="input" type="checkbox" /> <OnChange name="foo"> {(value, previous) => { // do something }} </OnChange>

我尝试了this,但由于在后视内部无法使用量词,因此无法正常工作。

3 个答案:

答案 0 :(得分:1)

您可以将它们作为分隔符进行匹配。
在您的情况下,您要与''匹配为2个分隔符。

这是这样做的

找到('')((?:(?:(?!''|'[^']*'')[\S\s])*(?:'[^']*'')?)*)('')
替换"$2"

https://regex101.com/r/Ii0aPe/1

_______________________________________

如果上述方法不适合您,则可以删除第一个('')并运行
它。

更新-另外,将中间部分添加到末尾以使对称性覆盖
结束条件。

请注意以下警告:仅包含'Ne voglio un po''
的字符串 将会转换为'Ne voglio un po"
当您不执行平衡定界符时,就会发生这种情况。

查找:((?:(?:(?!''|'[^']*'')[\S\s])*(?:'[^']*'')?)*)('')((?:(?:(?!''|'[^']*'')[\S\s])*(?:'[^']*'')?)*)
替换:$1"$3

https://regex101.com/r/KTYhmq/1

扩展

 (                             # (1 start)
      (?:
           (?:
                (?! '' | ' [^']* '' )
                [\S\s] 
           )*
           (?: ' [^']* '' )?
      )*
 )                             # (1 end)
 ( '' )                        # (2)
 (                             # (3 start)
      (?:
           (?:
                (?! '' | ' [^']* '' )
                [\S\s] 
           )*
           (?: ' [^']* '' )?
      )*
 )                             # (3 end)

答案 1 :(得分:0)

这个表达式非常有趣,我们将添加一个右侧边界,并且我们可能会以如下表达式开始:

\s'.+?\w'[^']

Demo 1

如果我们还有其他实例,我们肯定可以在表达式上加上其他约束,例如:

\s'[^']+?\w'[^'] 

Demo 2

\s'\w[^']+?\w'[^']

Demo 3

答案 2 :(得分:0)

我决定采用3个正则表达式解决方案。

  1. 我暂时将有问题的部分替换为我知道在文本中其他任何地方都找不到的字符组合。我选择了§£,例如this
  2. 然后只需将“”替换为“,例如this
  3. 最后,替换为§£,使所有内容恢复原样。像this