gpt4 book ai didi

java - 英语收缩灾难

转载 作者:行者123 更新时间:2023-12-04 07:46:33 26 4
gpt4 key购买 nike

背景
写一个直引号到 curl 引号转换器,我希望将替换分成几个不同的步骤。第一步是使用已知收缩的词典替换文本中的收缩。这不会解决歧义,但应该转换常见收缩中的直接引用用法。
问题
在 Java 中,\b\w不要在单词中包含撇号,这会使这个问题有点棘手。问题在于匹配以下单词:

  • 包含一个或多个撇号,但不以一个开头或结尾( 内部 );
  • 以撇号开头,可以包含一个或多个,但不以一个结尾( 开始 );
  • 以撇号结尾,可以包含一个或多个,但不要以一个开头( 结束 );和
  • 以撇号开头和结尾,但不能包含撇号( )。

  • 代码
    给出一些无意义的文本:

    'Twas---Wha'? Wouldn'tcha'? 'Twas, or 'twasn't, 'tis what's 'tween dawn 'n' dusk 'n stuff. Cookin'? 'Sams' place, 'yo''


    正则表达式应捕获以下单词:
  • 内部 :what's
  • 开始 :'Twas , 'Twas , 'twasn't , 'tis , 'tween , 'n
  • 结束 :Wha' , Wouldn'tcha' , Cookin'
  • :'n' , 'Sams' , 'yo'

  • 以下是无效的表达方式,混合了恶意的想法:
  • 内部 :\p{L}+'\p{L}*\p{L}
  • 开始 :((?<=[^\p{L}])|^)'\p{L}+('\p{L}|\p{L})?
  • 结束 :(\p{L}|\p{L}')+'(?=[^\p{L}]|$)

  • 这似乎有效:
  • :((?<=[^\p{L}])|^)'\p{L}+'(?!\p{L})


  • 什么正则表达式可以正确地对这四重收缩进行分类?

    最佳答案

    这个正则表达式应该做你想做的。它使用命名的捕获组以适当的环视对单词进行分类,以确保我们将整个单词与所需的外部引号匹配:

    (?<inner>(?<![\p{L}'])(?:\p{L}+')+\p{L}+(?![\p{L}']))|
    (?<began>(?<!\p{L})(?:'\p{L}+)+(?![\p{L}']))|
    (?<ended>(?<![\p{L}'])(?:\p{L}+')+(?!\p{L}))|
    (?<outer>(?<!\p{L})'\p{L}+'(?!\p{L}))
    inner查找包含一定数量的字母组后跟引号的字符串 (?:\p{L}+')+后面跟着一些字母 \p{L}+ .
    began查找一个字符串,其中包含一定数量的引号组,后跟一定数量的字母 (?:'\p{L}+)+ .
    ended查找包含一定数量的字母组后跟引号的字符串 (?:\p{L}+')+ .
    outer查找两端带有引号且中间带有一些字母的字符串 '\p{L}+' .
    Demo on regex101

    关于java - 英语收缩灾难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67171786/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com