我想在Matlab正则表达式中捕捉特定单词之间的单词。
例如,如果给出line ='aaaa \ bbbbb \ ccccc .... \ wwwww.xyz', 我想只抓住wwwww.xyz。
aaaa~wwww.xyz不代表特定的单词和字符数 - 这意味着它们可以任何字符不包括反斜杠,字符数可以大于1 wwwww.xyz总是在最后一次反斜杠之后。我的问题是正则表达式(行,'\\。+ \。xyz','匹配')并不总是有效,因为wwwww有时包含特殊字符,如' - '。
任何建议都表示赞赏。
答案 0 :(得分:1)
如果你必须使用正则表达式,这个正则表达式应该工作:
[\\]?(?!.+\\)([^.]+\.[a-z]{3})
工作正则表达式示例:
示例数据:
aaaa\bbbbb\ccccc\ww%20-www.xyz
www-654_33.xyz
匹配
1. ww%20-www.xyz
2. www-654_33.xyz
答案 1 :(得分:0)
除非您知道您的数据经过精心格式化(路径字符串是否被转义?),否则此处提供的解决方案可能100%可靠。问题归结为找到一个单词,它是文本行中的有效路径。这不容易。我们假设所有文件都有文件扩展名(在路径上下文中不一定如此)。然后,任意路径可能看起来像以下任何一种:
'wwwww.x'
'wwwww.xyz'
'\wwwww.xyz'
'ccccc\wwwww.xyz'
'\ccccc\wwwww.xyz'
...
str = 'The quick brown fox aaaa\bbbbb\ccccc\wwwww.xyz jumped over the lazy dog.';
matches = regexp(str,'\s\\?([^.\s\\]+\\)*([^.\s]+\.\w+)\s','tokens');
file_name = matches{1}(2)
返回(对于第一种情况,扩展名以上的所有情况都略有不同)
file_name =
'wwwww.xyz'
如果你知道文件扩展名是'.xyz'
,那么你可以改为使用它:
matches = regexp(str,'\s\\?([^.\s\\]+\\)*([^.\s]+\.xyz)\s','tokens');
顺便说一句,对于路径,可以使用fileparts
函数:
str = 'aaaa\bbbbb\ccccc\wwwww.xyz'; % A Windows-only path
% str = 'aaaa/bbbbb/ccccc/wwwww.xyz'; % A UNiX or OS X path (works on Windows too)
[path_str,file_name,file_ext] = fileparts(str)
返回
path_str =
aaaa\bbbbb\ccccc
file_name =
wwwww
file_ext =
.xyz
然后,您可以通过
获取带扩展名的文件名file_name_ext = [file_name file_ext];
另请注意,path_str
省略了尾随文件分隔符。
答案 2 :(得分:0)
假设你的字符串唯一的共同点是有一个文件路径分隔符,你对“从最后一个文件路径分隔符到第一个空格”的所有内容感兴趣,那么你可以试试
['[\' filesep ']([^\' filesep ']+?)(?:\s|$)']
在Windows平台上将减少为
\\([^\\]+?)(?:\s|$)
演示:
如果您希望按字面意义匹配扩展名(示例中为.xyz
),请将其更改为
\\([^\\]+?\.xyz)(?:\s|$)
“找到一个反斜杠后跟最少的(+?
)个数字”不反斜杠“,直到文字.xyz
后跟一个空格或字符串结尾”