引号内的撇号模式

时间:2016-04-01 06:53:40

标签: regex

我正在寻找一种可以找到单引号内的撇号的模式。例如文本

Foo'不能'禁止'不要'

我想在不能和不能找到并替换撇号,但我不想找单引号

我尝试了类似

的内容
(.*)'(.*)'(.*)'

并在第二个匹配组上应用替换。但对于有撇号2个单词的文本,这种模式不起作用。

编辑:澄清文本可以有单引号,其中没有撇号,应按原样保留。例如

'foo''不能'bar'不要'

我仍在寻找撇号,所以围绕foo的单引号不应该匹配

2 个答案:

答案 0 :(得分:2)

我相信你需要" word"要在'符号之前和之后显示的字符,可以使用字边界来完成:

\b'\b

请参阅regex demo

要仅匹配字母内的引号,请使用

(?<=\p{L})'(?=\p{L})
(?<=[[:alpha:]])'(?=[[:alpha:]])
(?U)(?<=\p{Alpha})'(?=\p{Alpha})  # Java, double the backslashes in the string literal

仅限ASCII

(?<=[a-zA-Z])'(?=[a-zA-Z])

答案 1 :(得分:1)

您可以使用以下正则表达式:

'[^']+'\s|'[^']+(')[^' ]+'

它会返回3个匹配项,如果捕获组1参与了该单词,它将是单词中的撇号:

  • &#39;富&#39;
  • &#39;可以'吨&#39;
  • &#39; {不要{1}}吨&#39;

demo

工作原理:

  • '
    • '[^']+'\s匹配撇号
    • '后跟至少一个不是撇号的字符
    • [^']+后跟撇号
    • '后跟空格
  • \s
  • |
    • '[^']+(')[^' ]+'匹配撇号
    • '后跟至少一个不是撇号的字符
    • [^']+后跟撇号,并在捕获组1中捕获它
    • (')后跟至少一个不是撇号或空格的字符
    • [^' ]+后跟撇号