我有以下内容:
1.5 5 tablespoon cream
½ (1 cup) heavy cream
¼ – ½ teaspoon cream
1 tablespoon cream
^(?:[\-\.\/\s]*[\d↉½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒⅟])+
我试图找出原因¼ – ½
不匹配,我在非捕获组中有一个转义的连字符。
我尝试过的:
^(?:[\-\.\/\s\W]*[\d↉½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒⅟])+
但它匹配½ (1
,我只想要包含点、连字符和空格的所有内容。
负向前瞻\W
它标记非单词字符,它准确地捕获了我想要实现的目标,但是负向前瞻并不会阻止1 (1
为了避免被捕获,这是我尝试过的:^(?:[\-\.\/\s\W]*(?!\()*[\d↉½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒⅟])+
https://regex101.com/r/bITQ4F/2 https://regex101.com/r/bITQ4F/2
您文本中的“连字符”实际上是EN DASH http://www.fileformat.info/info/unicode/char/2013/index.htm(十六进制 2013 或十进制 8211),而不是常规连字符(十六进制 2D 或十进制 45)。
复制粘贴(这样你就可以抓住破折号)并使用它:
^(?:[-–./\s]*[\d↉½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒⅟])+
它在字符类中同时具有常规连字符和短划线字符。
请注意,字符类中的所有字符都不需要转义,即使是连字符,因为它是第一个,并且在该位置不需要转义。
如果您想添加EM DASH http://www.fileformat.info/info/unicode/char/2014/index.htm也复制一下—
并将其粘贴到字符类的末尾。
如果您的工具/语言支持 POSIX 字符类(可能),您可以使用破折号标点符号 class Pd
:
^(?:[\p{Pd}./\s]*[\d↉½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒⅟])+
哪个更具可读性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)