从下面提到的输入字符串中,我想为s:ds字段提取{}中指定的值。我附上了我的正则表达式。现在我用于http://www.regexr.com/测试的模式是:
s:ds=\\\"({[\d\w]{8}\-([\d\w]{4}\-){3}[\d\w]{12}})\\\"
它的工作非常好。
但是C#代码中的相同功能不起作用。我还为c#代码添加了\\而不是\并替换了\"用\"" 。如果我做错了,请告诉我。以下是代码段。
string inputString is "s:ds=\"{46C01EB7-6D43-4E2A-9267-608DE8AFA311}\" s:ds=\"{37BA4BA0-581C-40DC-A542-FFD9E99BC345}\" s:id=\"{C091E71D-4817-49BC-B120-56CE88BC52C2}\"";
string regex = @"s:ds=\\\""({[\d\w]{8}\-(?:[\d\w]{4}\-){3}[\d\w]{12}})\\\""";
MatchCollection matchCollection = Regex.Matches(layoutField, regex);
if (matchCollection.Count > 1)
{
Log.Info("Collection Found.", this);
}
答案 0 :(得分:1)
如果您只是为了匹配值...
如果你只想匹配你的鸥翼支撑,你应该能够只使用([\d\w]{8}\-([\d\w]{4}\-){3}[\d\w]{12})
:
string input = "s:ds=\"{46C01EB7-6D43-4E2A-9267-608DE8AFA311} ...";
// Use the following expression to just match your GUID values
string regex = @"([\d\w]{8}\-([\d\w]{4}\-){3}[\d\w]{12})";
// Store your matches
MatchCollection matchCollection = Regex.Matches(input, regex);
// Iterate through each one
foreach(var match in matchCollection)
{
// Output the match
Console.WriteLine("Collection Found : {0}", match);
}
您可以see a working example of this in action here和示例输出如下所示:
如果您只想匹配s:ds
...
如果您只想捕获s:ds
部分的值,可以考虑将(?<=(s:ds=""{))
附加到表达式的前面,这将a look-behind只匹配值以“s:ds = {”:
string regex = @"(?<=(s:ds=""{))([\d\w]{8}\-([\d\w]{4}\-){3}[\d\w]{12})";
您可以see an example of this approach here并在下面进行演示(请注意它与s:id
元素不符:
另一个考虑因素
目前,您使用\w
来匹配表达式中的“字”字符,虽然这可能适合您的使用,但它会匹配所有数字\d
,字母a-zA-z
和下划线{ {1}}。您不太可能需要其中的一些,因此您可能需要考虑修改您的字符集以使用您期望的_
仅匹配大写字母和数字或[A-Z\d]
如果您只是预期的GUID值(例如十六进制)。
答案 1 :(得分:0)
看起来你可能过度逃避了。
试一试:
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
override func viewDidLoad() {
super.viewDidLoad()
self.myTableView.allowsMultipleSelection = true
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = UITableViewCellAccessoryType.Checkmark
}
func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = UITableViewCellAccessoryType.None
}