小编bla*_*238的帖子

如何用2位数年份解析字符串日期?

我需要解析代表格式6位数的日期字符串yymmdd,其中yy范围从59到05年(1959至2005年).根据time模块文档,Python的默认透视年份是1969年,这对我不起作用.

是否有一种简单的方法可以覆盖枢轴年,或者您可以建议其他解决方案吗?我使用的是Python 2.7.谢谢!

python date 2-digit-year y2k

31
推荐指数
3
解决办法
3万
查看次数

Python:按分隔符列表拆分字符串

在Python中,我想使用分隔符列表拆分字符串.分隔符可以是逗号或分号.应删除空格,除非它位于非空格,非分隔符的中间,在这种情况下应保留空格.

测试用例1:ABC,DEF123,GHI_JKL,MN OP
测试用例2:ABC;DEF123;GHI_JKL;MN OP
测试用例3:ABC ; DEF123,GHI_JKL ; MN OP

听起来像正则表达式的情况,这很好,但如果它更容易或更干净,以另一种方式,甚至更好.

谢谢!

python regex split separator

9
推荐指数
2
解决办法
3万
查看次数

Visual Studio的调试器/交互式窗口如何在.NET中转储COM对象的属性?

在这个相关的问题中,我注意到Visual Studio的调试器能够枚举System.__ComObject引用的属性,这是"当包装器类型不明确时使用的隐藏类型" - 例如,当您从另一个获取它时获得的对象类型COM对象,不要自己实例化它:

COM对象调试视图

此外,如果您只是将COM对象的标识符写入立即窗口,其属性和值将被类似地转储:

COM对象立即窗口

请注意,这与VS2010的" 动态视图 " 是分开的,我认为它使用IDispatchCOM反射来枚举COM对象的属性,而不使用PIA和.NET反射.我正在使用的对象没有实现IDispatch(也没有实现IProvideClassInfo),因此,"动态视图"无法获取有关它们的任何信息:

动态视图

有趣的是,SharpDevelop的调试器无法列出System.__Comobjects(例如point.Envelope)的成员,只能列出强类型的RCW(例如point).

SharpDevelop调试器

那么Visual Studio如何才能做到呢?

我相信在这种情况下,这是因为主互操作程序集存在这些对象支持的接口的定义,并且Visual Studio可能使用反射来枚举支持的接口和属性.那是准确的吗?如果是这样,它是如何工作的?

对于初学者,它如何访问PIA?它只查看当前加载的PIA还是动态加载它们(如果是,如何)?它如何确定哪个界面可以有多个枚举属性?它似乎只使用一个,而不一定是第一个.从我正在使用的API(ArcObjects)的文档中,这些对象的默认接口是IUnknown,所以它不仅仅使用默认接口.

在屏幕截图的示例中,它枚举成员的IEnvelope接口是接口,它继承自IGeometry接口.VS2010如何知道不会枚举成员IGeometry,在我的测试中,如果你只是枚举PIA中的所有接口类型,它首先出现?一些非常聪明的事情或者我错过了一些明显的东西?

我问的原因是LINQPad 的开发人员似乎愿意实现相同的功能,如果他知道VS如何做到这一点.所以这里一个好的答案可以帮助改进这个非常受欢迎的工具.

com arcobjects com-interop visual-studio-2010 linqpad

9
推荐指数
1
解决办法
1167
查看次数

如何将字典转换为平面列表?

鉴于Python dict如下:

{
  'a': 1,
  'b': 2,
  'c': 3
}
Run Code Online (Sandbox Code Playgroud)

使用键和值在线创建平面列表的简单方法是什么?例如:

['a', 1, 'b', 2, 'c', 3]
Run Code Online (Sandbox Code Playgroud)

python dictionary list python-2.7

6
推荐指数
2
解决办法
3922
查看次数

如何让LINQPad转到Dump()系统.__ ComObject引用?

我正在使用LINQPad快速开发小型ArcObjects(一个基于COM的ESRI ArcGIS软件库)应用程序,并且已经成功地将它用于Dump()我从.NET初始化的COM对象的属性,但任何COM对象从现有COM对象获得的只是作为System.__ComObject引用转储,这不是特别有用:

LINQPad截图

这个帮助主题解释了为什么会发生这种情况,我认为我理解,但是想知道解决这种行为有哪些选择,特别是在使LINQPad(甚至)功能更强大的背景下.

有趣的是,Visual Studio的调试器能够显示这些对象的属性,甚至是值类型的值:

Visual Studio调试ArcObjects

Visual Studio使用什么机制来实现这种内省,为什么LINQPad的Dump方法不会这样做呢?编辑:请参阅有关VS如何执行此操作的相关问题:Visual Studio的调试器/交互式窗口如何在.NET中转储COM对象的属性?

ArcObjects的.NET SDK包括具有的RCW每个伴生类的COM接口可以通过实施PIA的,所以我想应该可以以编程方式包装这些对象.

作为一种解决方法,我成功地Marshal.CreateWrapperOfType()在我的LINQ查询中使用来强制LINQPad在我碰巧知道应该使用哪个CoClass时转储对象的属性.当然,这只能正确转储值类型属性 - 任何基于COM的引用类型属性仍然被报告为System.__ComObject,因此正确的解决方案必须以递归方式工作以获取包装.

之前的一个问题中,我了解到CoClass可以在运行时确定它是否实现IPersist,而ArcObjects的很大一部分都是如此.我可以以某种方式使用这种技术或其他技术自动强制System.__ComObject从PIA到适当的RCW吗?如果是这样,我如何在LINQPad中实现它,例如通过提供ICustomMemberProvider实现?这可以是递归的,因此也可以包装也是COM对象的属性吗?

我正在使用针对.NET 4.0的LINQPad 4.x,但我也对支持LINQPad 2.x感兴趣(因此,首选适用于.NET 3.5和.NET 4.0的解决方案,但这不是必需的).

更新:我已经弄清楚我的问题的第一部分是如何System.__ComObject使用返回的CLSID在其RCW中包装IPersist.GetClassID.请参阅此相关问题和我正在使用的代码的答案.

我仍然想知道如何将其用于LINQPad的Dump方法.

c# com com-interop rcw linqpad

5
推荐指数
1
解决办法
1569
查看次数

如何为句子中的每个单词组成一个组?

这可能是一个愚蠢的问题,但......

假设您有一句话:

快速的棕色狐狸

或者你可能会得到一句话:

快速的棕色狐狸跳过懒狗

简单的正则表达式(\ w*)找到第一个单词"The"并将其放入一个组中.

对于第一句,你可以写(\ w*)\ s*(\ w*)\ s*(\ w*)\ s*(\ w*)\ s*将每个单词放在自己的组中,但是假设您知道句子中的单词数量.

是否有可能编写一个正则表达式,将任意句子中的每个单词放入其自己的组中?如果您可以执行类似(?:(\w*)\ s*)*的操作以将其分组(\ w*)的每个实例,那将是很好的,但这不起作用.

我在Python中这样做,我的用例显然比"快速棕色狐狸"复杂一点,所以如果Regex可以在一行中做到这一点会很好,但如果那不可能那么我会认为是次佳解决方案是使用re.findall()或类似的东西遍历所有匹配.

感谢您的任何见解.

编辑:为了完整性,这是我的实际用例以及我如何使用您的帮助解决它.再次感谢.

>>> s = '1 0 5 test1 5 test2 5 test3 5 test4 5 test5'
>>> s = re.match(r'^\d+\s\d+\s?(.*)', s).group(1)
>>> print s
5 test1 5 test2 5 test3 5 test4 5 test5
>>> list = re.findall(r'\d+\s(\w+)', s)
>>> print list
['test1', 'test2', 'test3', 'test4', 'test5']
Run Code Online (Sandbox Code Playgroud)

python regex regex-group

4
推荐指数
2
解决办法
3388
查看次数

如何使用"controller as"语法继承基本控制器?

这是一个片段,演示如何使用$controller和继承基本控制器$scope:

var app = angular.module('app', []);

app.controller('MainCtrl', function($scope, $controller) {
  $controller('BaseCtrl', {
    $scope: $scope
  })
});

app.controller('BaseCtrl', function($scope) {
  $scope.name = 'World';
});
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html ng-app="app">

<head>
  <meta charset="utf-8" />
  <title>AngularJS</title>
  <script>
    document.write('<base href="' + document.location + '" />');
  </script>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
  <script src="app.js"></script>
</head>

<body ng-controller="MainCtrl">
  <p>Hello {{name}}!</p>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

如何使用"控制器为"语法执行相同操作?这个片段演示了我的目标,但它不起作用:

var app = angular.module('app', []);

app.controller('MainCtrl', function($scope, $controller) {
  $controller('BaseCtrl', {
    $scope: $scope
  })
});

app.controller('BaseCtrl', function() {
  this.name = 'World';
});
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs angularjs-scope

2
推荐指数
1
解决办法
1091
查看次数