我正在寻找一种可以找到单引号内的撇号的模式。例如文本
Foo'不能'禁止'不要'
我想在不能和不能找到并替换撇号,但我不想找单引号
我尝试了类似
的内容(.*)'(.*)'(.*)'
并在第二个匹配组上应用替换。但对于有撇号2个单词的文本,这种模式不起作用。
编辑:澄清文本可以有单引号,其中没有撇号,应按原样保留。例如
'foo''不能'bar'不要'
我仍在寻找撇号,所以围绕foo的单引号不应该匹配
答案 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; 工作原理:
'
'[^']+'\s
匹配撇号'
后跟至少一个不是撇号的字符[^']+
后跟撇号'
后跟空格\s
或|
'[^']+(')[^' ]+'
匹配撇号'
后跟至少一个不是撇号的字符[^']+
后跟撇号,并在捕获组1中捕获它(')
后跟至少一个不是撇号或空格的字符[^' ]+
后跟撇号