如何从资源分配中获取资源名称

时间:2014-06-10 16:20:19

标签: c# regex mpxj

我正在使用MPXJ来读取mpp文件。我有一个资源分配字符串如下:

string st = [[Resource Assignment task=Sign contract and update data resource=
X.C. Information Management start=Thu Jun 09 08:00:00 ICT 2014 finish=Thu Jun 05 17:
00:00 ICT 2014 duration=32.0h workContour=null]]

我想从上面的字符串中获取资源名称( X.C。信息管理)。
目前,我使用的代码:

st.Split('=')[2].Replace(" start", ""); // return X.C. Information Management<br/>

我认为使用正则表达式,但是,我没有任何想法来实现它 如果可以,请帮助我。

由于

3 个答案:

答案 0 :(得分:1)

如果您想要的信息包含在粗体标记中(<b>&amp; </b>),并且您的字符串中没有其他粗体标记,则此正则表达式应该工作:

(?<=<b>).*(?=<\/b>)

请参阅here

在C#中,您可以这样做:

Regex regex = new Regex(@"(?<=<b>).*(?=<\/b>)");
string testString = @"*string st = [[Resource Assignment task=Sign contract and update data resource=<b>X.C. Information Management</b> start=Thu Jun 09 08:00:00 ICT 2014 finish=Thu Jun 05 17:00:00 ICT 2014 duration=32.0h workContour=null]]*";
string text = regex.Match(testString).Value;

text将等于X.C. Information Management

编辑:好的 - 所以OP移除了<b>标签,但原理仍然非常相似。只需将<b>标记替换为您知道的适当标记将在您要查找的字符串之前和之后。例如:

(?<=resource=).*(?=start)

答案 1 :(得分:1)

您可以像这样使用正则表达式:

resource=(.*)\sstart=

信息将在不在匹配字符串中的组中:

Regex.Match(input, "resource=(.*)\sstart=").Groups[1].Value

答案 2 :(得分:0)

有趣......看起来OP已经从MPXJ中检索了一个Resource实例,并且正在使用该实例的toString()方法来查看数据,例如:

Project file;
// Some code to read the project

// Retrieve the first resource
Resource resource = file.getResourceByUniqueID(1);
string st = resource.toString();

这不是一个好主意...... toString()方法仅用于提供调试信息。

更好的方法是调用方法直接检索名称:

string st = resource.getName();

你可以找到MPXJ here的API文档,它可以让你了解每个对象的可用方法,如果你没有为你提供这个。