Matlab正则表达式;我想在特定的单词之间听到单词

时间:2014-01-29 22:44:37

标签: regex matlab

我想在Matlab正则表达式中捕捉特定单词之间的单词。

例如,如果给出line ='aaaa \ bbbbb \ ccccc .... \ wwwww.xyz', 我想只抓住wwwww.xyz。

aaaa~wwww.xyz不代表特定的单词和字符数 - 这意味着它们可以任何字符不包括反斜杠,字符数可以大于1 wwwww.xyz总是在最后一次反斜杠之后。我的问题是正则表达式(行,'\\。+ \。xyz','匹配')并不总是有效,因为wwwww有时包含特殊字符,如' - '。

任何建议都表示赞赏。

3 个答案:

答案 0 :(得分:1)

如果你必须使用正则表达式,这个正则表达式应该工作:

[\\]?(?!.+\\)([^.]+\.[a-z]{3})

工作正则表达式示例:

http://regex101.com/r/fL5oS5

示例数据:

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|$)

演示:

http://regex101.com/r/jW5tT1

如果您希望按字面意义匹配扩展名(示例中为.xyz),请将其更改为

\\([^\\]+?\.xyz)(?:\s|$)

“找到一个反斜杠后跟最少的(+?)个数字”不反斜杠“,直到文字.xyz后跟一个空格或字符串结尾”

enter image description here