我正在使用
gsub(".*_","",ldf[[j]]),1,nchar(gsub(".*_","",ldf[[j]]))-4)
创建要写入的路径和文件名。对于lfd
中只有一个下划线的名称,它可以正常工作。文件名后面紧跟着另一个下划线,它切断了第二个下划线前面的所有内容。
例如,我有:
Arof_07122016_2.csv
,我想要07122016
,但得到2
。但是我不知道为什么会这样。如何使用此行仅截断第一个下划线的fromt字符并保留第二个下划线的字符?
答案 0 :(得分:2)
默认情况下,正则表达式重复是贪婪的,如?regex
中所述:
默认情况下,重复是贪婪的,因此最大重复次数为 使用重复。可以通过添加?将其更改为“最小”。至 量词。 (还有更多的量词可以近似 匹配:请参阅TRE文档。)
因此,您应该使用模式".*?_"
。但是,gsub
将进行多个匹配,因此最终结果相同。为了解决这个问题,请使用sub
,它只能使用正则表达式中的^
来匹配1或在字符串的开头指定要匹配的内容。
sub(".*?_","","Arof_07122016_2.csv")
[1] "07122016_2.csv"
gsub("^.*?_","","Arof_07122016_2.csv")
[1] "07122016_2.csv"
答案 1 :(得分:2)
似乎想要
> ValueError Traceback (most recent call
> last) <ipython-input-9-c4eebc3bcdb0> in <module>()
> 1
> 2 from gensim.models import Word2Vec
> ----> 3 model = gensim.models.KeyedVectors.load_word2vec_format('/home/slava/GoogleNews-vectors-negative300.bin.gz',
> binary=True)
>
> /home/slava/anaconda2/lib/python2.7/site-packages/gensim/models/keyedvectors.pyc
> in load_word2vec_format(cls, fname, fvocab, binary, encoding,
> unicode_errors, limit, datatype)
> 205 with utils.smart_open(fname) as fin:
> 206 header = utils.to_unicode(fin.readline(), encoding=encoding)
> --> 207 vocab_size, vector_size = map(int, header.split()) # throws for invalid file format
> 208 if limit:
> 209 vocab_size = min(vocab_size, limit)
>
> ValueError: need more than 0 values to unpack
请参见regex demo
模式匹配
sub("^[^_]*_([^_]*).*", "\\1", ldf[[j]])
-字符串的开头^
-除[^_]*
以外的0多个字符_
-一个秘密的人_
-捕获组#1:([^_]*)
以外的任何0+个字符_
-字符串的其余部分。替换模式中的.*
仅将捕获的值保留在结果中。
\1