帮助制作一个好的正则表达式?

时间:2010-01-30 18:14:29

标签: c# regex string split

任何人都可以帮我制作正则表达式或者给我一个可以拆分/检查以下字符串的好解决方案:

“< 2342Flsdn3Z>< 9124Fsflj20>” 中

一切都以“<”开头并且6个字符是“F”,字符串以“>”结尾 是否有可能制作出能够找到“字符串”的正则表达式?

4 个答案:

答案 0 :(得分:5)

这个怎么样:<.{4}F[^>]+>

它匹配开头<,后跟任意4个字符F,然后是结束>之前的任何内容(通过匹配任何不是>的内容)。

string input = "<2342Flsdn3Z><9124Fsflj20>";
string pattern = "<.{4}F[^>]+>";
foreach (Match m in Regex.Matches(input, pattern))
{
    Console.WriteLine(m.Value);
}

编辑:制作好的正则表达式的一部分是明确指定要匹配的模式。例如,你提出问题的方式会留下一些细节。只要F在你指定的位置,我就用我的模式回复任何角色。

为了获得更好的正则表达式,你可以告诉我们很多事情:

  • F之前的字符将始终为数字且长度为4:\d{4}[0-9]{4}
  • F之后的字符长度为X(6?),只能是数字和字母:[\dA-Z]{6}
  • 大小写不敏感:使用RegexOptions.IgnoreCase(.NET)或使用[a-zA-Z]
  • 陈述你的意图:你匹配吗?试图提取内在价值?拆分是什么意思?拆分什么?
  • 指定您正在使用的语言:C#,Python,Perl等(您这样做了)

答案 1 :(得分:1)

是。 <[A-Za-z\d]{4}F[A-Za-z\d]{6}>

&LT;然后是任意4个字母或数字,后跟F,后跟任何6个字母或数字,后跟&gt;

我假设它在F之后总是六次。你可以修改重复以满足你的需要。

保存有效评论的原始建议解决方案,以便其他人可以从我的错误中吸取教训:[\d\w]{4}F[\d\w]{6}>

答案 2 :(得分:0)

易:

<\d{4}F\w+>

或者,只是得到字符串:

(?<=<)\d{4}F\w+(?=>)

答案 3 :(得分:0)

我做了一些假设,括号内的所有内容都需要是一个单词字符,并且在尾随括号之前至少有一个,但可能是任意数量的单词字符。

var regex = new Regex( "<\w{4}F\w+>" );