我有一个像"/"
这样的字符串,这两个数字的长度没有任何限制,在它之间可以是任何东西,在这个例子中我展示了"([\a-z]*?) (.) ([\a-z]*?) "
但它可以是一个字母,一个元音,甚至一个数字,但它们之间有一个空格,这是一个分界符。
如何创建正则表达式来解决它?
另外,正则表达式也适用于此方案“789787987897”,没有分隔符和第二个数字。
我尝试了类似docker run -v /home/<host user>/.ssh:/home/<docker user>/.ssh <image>
的内容,但没有成功。
答案 0 :(得分:5)
此表达式应该有效:
^(\d+)\D*?(\d*)$
我们的想法是在字符串\d+
的开头与^
匹配尽可能多的数字,然后与\D*?
匹配尽可能少的非数字,最后匹配字符串$
末尾的零个或多个数字。
请注意\d+
和\d*
周围的括号:他们正在设置正则表达式捕获组。您可以使用这些组从C#代码中获取与正则表达式匹配的数字。
注意:如果您想在&#34;之间的&#34;空格中允许数字,请使用.*
代替\D*
。
答案 1 :(得分:3)
我建议使用 achors 以获取第一个和最后数字:
string pattern = @"^(?<first>[0-9]+)(\s+.*\s+(?<last>[0-9]+))?$";
测试
string[] tests = new string[] {
"8798798778979878978", // one number
"123 456 789", // number 456 is a delimiter
"123 / 456", // delimiter is /
"123 /456", // failed delimeter / (no space after /), no match
"abc" // no match
};
var report = tests
.Select(line => new {
line = line,
match = Regex.Match(line, pattern)
})
.Select(item => item.match.Success
? $"{item.line,-30} first: {item.match.Groups["first"].Value,-20} last: {item.match.Groups["last"].Value,-20}"
: $"{item.line,-30} NO MATCH");
Console.WriteLines(string.Join(Environment.NewLine, report));
结果:
8798798778979878978 first: 8798798778979878978 last:
123 456 789 first: 123 last: 789
123 / 456 first: 123 last: 456
123 /456 NO MATCH
abc NO MATCH
答案 2 :(得分:1)
这样的事可能有用:
require "spidr"
require "open-uri"
Spidr.site('http://example.com') do |spider|
spider.every_url do |url|
link= url+"?foo=bar"
response = open(link).read
end
end