Pattern for apostrophe inside quotes

一世执手 提交于 2021-02-05 11:14:11

问题


I am looking for a pattern that can find apostrophes that are inside single quotes. For example the text

Foo 'can't' bar 'don't'

I want to find and replace the apostrophe in can't and don't, but I don't want to find the single quotes

I have tried something like

(.*)'(.*)'(.*)'

and apply the replace on the second matching group. But for text that has 2 words with apostrophes this pattern won't work.

Edit: to clarify the text could have single quotes with no apostrophes inside them, which should be preserved as is. For example

'foo' 'can't' bar 'don't'

I am still looking for only apostrophes, so the single quotes around foo should not match


回答1:


I believe you need to require "word" characters to appear before and after a ' symbol, and it can be done with a word boundary:

\b'\b

See the regex demo

To only match the quote inside letters use

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

Or ASCII only

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



回答2:


You can use the following regular expression:

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

it will return 3 matches, and if capture group 1 participated in the word, it will be the apostrophe in the word:

  • 'foo'
  • 'can't'
  • 'don't'

demo

How it works:

  • '[^']+'\s
    • ' match an apostrophe
    • [^']+ followed by at least one character that isn't an apostrophe
    • ' followed by an apostrophe
    • \s followed by a space
  • | or
  • '[^']+(')[^' ]+'
    • ' match an apostrophe
    • [^']+ followed by at least one character that isn't an apostrophe
    • (') followed by an apostrophe, and capture it in capture group 1
    • [^' ]+ followed by at least one character that is not an apostrophe or a space
    • ' followed by an apostrophe


来源:https://stackoverflow.com/questions/36349843/pattern-for-apostrophe-inside-quotes

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!