我有以下内容:
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↉½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒⅟])+
答案 0 :(得分:2)
文本中的“连字符”实际上是EN DASH(十六进制2013或十进制8211),而不是常规连字符(十六进制2D或十进制45)。
复制粘贴(所以你抓住短划线)并使用它:
^(?:[-–./\s]*[\d↉½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒⅟])+
在字符类中同时包含常规连字符和短划线字符。
请注意,字符类中的所有字符都不需要转义,即使是连字符,因为它是第一个并且在该位置它不需要转义。
如果您也要添加EM DASH,请复制—
并将其粘贴到字符类的末尾。
如果您的工具/语言支持POSIX字符类(可能),您可以使用 dash标点类Pd
:
^(?:[\p{Pd}./\s]*[\d↉½⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅜⅝⅞⅑⅒⅟])+
更具可读性。