Ruby 将连字符转换为双连字符的正则表达式
我的降价实现将双连字符变成了灰烬。例如,a--b变成a--b 但有时用户在表示a--b时会写a-b。我想要一个正则表达式来解决这个问题Ruby 将连字符转换为双连字符的正则表达式,ruby,markdown,Ruby,Markdown,我的降价实现将双连字符变成了灰烬。例如,a--b变成a--b 但有时用户在表示a--b时会写a-b。我想要一个正则表达式来解决这个问题 显然,我会想到body.gsub(/-/,“-”),但这会弄乱markdown的无序列表–即,如果一行开始-列表项,它将成为-列表项。因此,解决方案必须仅在左侧某处有单词字符时交换连字符您可以将单词字符与连字符的左侧匹配,并在替换字符串中使用backreference将其放回: body.gsub(/(\w) - /, '\1 -- ') 也许,如果你想更能接
显然,我会想到
body.gsub(/-/,“-”)
,但这会弄乱markdown的无序列表–即,如果一行开始-列表项
,它将成为-列表项
。因此,解决方案必须仅在左侧某处有单词字符时交换连字符您可以将单词字符与连字符的左侧匹配,并在替换字符串中使用backreference将其放回:
body.gsub(/(\w) - /, '\1 -- ')
也许,如果你想更能接受
gsub(/\b([ \t]+)-(?=[ \t]+)/, '\1--')
\b[\t]通过字边界条件强制在空白之前添加非空白。我不使用\s来避免线路运行。我也只使用一个捕获来保留前面的空白(Ruby 1.8.x是否有一个
?您也在其中加了一个\s?来考虑是否有空间:(\w)\s?-这个正则表达式比@yjerem(更简单)的答案有什么优势?@Horace它接受更多并保留输入空白(空格或制表符)。例如:“Hello\t\t-world!”将转换为“Hello\t\t--world!”,这可能是可取的,也可能是不可取的。