2017-08-01 81 views
4

我試圖使用strsplit(str, '[,-\\+]')分割一個字符串,這意味着任何',', '-' or '+'都可以是分隔符。但是,我發現這種模式似乎也匹配數字和大寫字母。 嘗試爲什麼'[' - ']'匹配'46','X','A',

  • grep('[,-\\]', 'X'), returns 1
  • grep('[,-\\]', '46'), returns 1
  • grep('[,-\\]', '-'), returns 1
  • grep('[,-\\]', ','), returns 1

這似乎是'[,-\\]'匹配所有的數字,大寫字母,',''-'

我只是不明白爲什麼會出現這種情況。

謝謝你的任何輸入

+0

如果我改變模式的順序,如'[\\ +, - ]',那麼它只匹配'+',','和' - '。我很困惑 –

+0

可能的重複[如何匹配連字符與正則表達式?](https://stackoverflow.com/questions/4068629/how-to-match-hyphens-with-regular-expression) –

回答

3

您需要使用

strsplit(str, '[,+-]') 

拆就,+-。如果您需要添加\進行拆分,請使用'[,\\+-]'默認 TRE正則表達式引擎。

-位於括號表達式的末尾(或開始處)時,它將被解析爲文字連字符。在你的情況下,它被視爲一個範圍內運營商和'[,-\\]',\的範圍內字符相匹配:

enter image description here

請注意,您在這裏使用TRE正則表達式的味道(因爲沒有perl=TRUE指定)因此,雙反斜槓在正則表達式模式中被視爲文字反斜槓。 "[,-\\]"如果使用PCRE正則表達式引擎來解析模式,模式將無效,您需要在字符串文字中定義反斜槓並帶有4個反斜槓。

+1

這是很有意義的我!謝謝!! –

相關問題