是否有可能逃避单词列表中的空格?

时间:2017-11-17 14:40:51

标签: elixir

我试图与阿根廷的所有省份一起创建一个原子列表。由于一些由多个单词组成,我需要逃避空白。

~w[
  Buenos\sAires
  Capital\sfederal Catamarca Chaco Chubut Corrientes Córdoba
  Entre\sRíos Formosa Jujuy La\sPampa La\sRioja Mendoza Misiones Neuquén
  Río\sNegro Salta San\sJuan San\ Luis Santa\sCruz Santa\sFe
  Santiago\sdel\sEstero Tierra\sdel\sFuego Tucumán
]a

我尝试使用sigil_wsigil_W,使用经典转义序列\\s,但它不起作用。

  

(26个省 - 1)*(2个引号(")+ 1个逗号(,)+ 1个可读空间("")) - 25个空格我会用到这个印记form = 75个字​​符我可以保存

我知道我可以使用自定义印记实现这一目标:

defmodule MySigil do
  def sigil_X(string, [])  do
   string
   |> String.split(~r/\s/)
   |> Enum.map(&String.replace(&1, "\\s", " "))
  end
end

import MySigil
~X[Buenos\sAires La\sPlata]
["Buenos Aires", "La Plata"]

...但是有更少的"自制"接近?

2 个答案:

答案 0 :(得分:2)

不,这是不可能的。 sigil_w模块中的sigil_WKernel call the private split_words方法,which uses String.split分割将始终在任何空格上拆分的字符串。

答案 1 :(得分:1)

虽然没有黑客攻击是不可能的,但周围有一个垃圾。将以下代码复制粘贴到~w|a b c| #⇒ ["a b", "c"] 并执行它:

#include <QMainWindow>

class QGraphicsView;
class QGraphicsRectItem;

class MainWindow : public QMainWindow
{
    Q_OBJECT    
public:
    explicit MainWindow(QWidget *parent = nullptr);

    bool eventFilter(QObject *watched, QEvent *event) override;

private:
    QGraphicsView *m_view;
    QGraphicsRectItem *m_item;
};

[ NB ,不幸的是,SO将原始符号转换为普通空间,因此复制粘贴不会开箱即用] 我能听到你的“哇?”:)

这是通过non-breakable space实现的。如果你对此感觉不错,那么只需使用nbsp就可以了。