我需要一个标识以下内容的正则表达式:“[或a] [text] [number]”
例如,在以下字符串中:
"the foo or the bar 100"
我需要一个单独匹配的正则表达式
192.168.
没有匹配
function getLocalIp() {
const os = require('os');
for(let addresses of Object.values(os.networkInterfaces())) {
for(let add of addresses) {
if(add.address.startsWith('192.168.')) {
return add.address;
}
}
}
}
有什么建议吗?
我正在用C#实现正则表达式。
答案 0 :(得分:1)
我认为这样可行......虽然可能有一种不那么冗长的方式
\bthe\b(?:(?!\bthe\b).)*?\d+|\ba\b(?:(?!\ba\b).)*?\d+
解释
鉴于第一部分\bthe\b(?:(?!\bthe\b).)*?\d+
\b
在字边界处断言位置the
字面匹配字符the
\b
在字边界处断言位置非捕获组(?:(?!\bthe\b).)*?
*?
量词 - 零和无限次之间的匹配,尽可能少,根据需要扩展(懒惰)否定前瞻(?!\bthe\b)
断言下面的正则表达式不匹配
\b
在字边界处断言位置the
字面匹配字符the
\b
在字边界处断言位置继续
.
匹配任何字符(行终止符除外)\d+
匹配一个数字(等于[0-9])+
量词 - 在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)示例强>
var pattern = @"\bthe\b(?:(?!\bthe\b).)*?\d+|\ba\b(?:(?!\ba\b).)*?\d+";
var input = "The foo or the bar 100. A large machine 200. The transformer 100 and a bridge 200. GufftheGuff guffAguff is not matching 100";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
var matches = regex.Matches(input);
foreach (Match match in matches)
{
Console.WriteLine(match.Value);
}
<强>输出强>
"the bar 100"
"A large machine 200"
"The transformer 100"
"a bridge 200"
答案 1 :(得分:0)
你非常接近。你需要的只是一个消极的期待。
以下是你的正则表达方式:
(?i)((?!\ba\b.*?\ba\b)\ba\b.+?\d+)|((?!\bthe\b.*?\bthe\b)\bthe\b.+?\d+)
基本上\b
元字符可以将the
和a
作为单词匹配,而不是作为单词的一部分。因此,如果你将它们剥离出来,你会得到:
(?i)((?!the.+?the)the.+?\d+)|((?!a.+?a)a.+?\d+)
让我们看看其中一个,了解它的作用:
((?!the.+?the)the.+?\d+)
^ -- Negative lookahead to ensure that the matched group doesn't have the word "the" twice
^ -- There is a word "the"
^ -- Followed by any characters
^ -- Followed by some digits
同样适用于正则表达式的其他部分。
您可以在此处尝试各种组合:https://regex101.com/r/ZNMg7E/3
答案 2 :(得分:-1)
尝试此模式 or\s(?<w1>[\w\s]+).\s(?<w2>[\w\s]+).
代码的
string bs = "The foo or the bar 100. A large machine 200.";
Regex regex = new Regex(@"or\s(?<w1>[\w\s]+).\s(?<w2>[\w\s]+).");
Match match = regex.Match(bs);
if (match.Success)
{
Console.WriteLine(match.Groups["w1"].Value);
Console.WriteLine(match.Groups["w2"].Value);
}
// Outputs "the bar 100" and "A large machine 200"
这不是正则表达式,但如果你不能使用正则表达式,你仍然可以使用它
string bs = "The foo or the bar 100. A large machine 200.";
string[] dotspl = bs.Split(new string[]{". "}, StringSplitOptions.None);
string pt1 = dotspl[0].Split(new string[]{" or "}, StringSplitOptions.None)[1];
string pt2 = dotspl[1];
Console.WriteLine(pt1 + " and " + pt2);