我需要解析代表格式6位数的日期字符串yymmdd
,其中yy
范围从59到05年(1959至2005年).根据time
模块文档,Python的默认透视年份是1969年,这对我不起作用.
是否有一种简单的方法可以覆盖枢轴年,或者您可以建议其他解决方案吗?我使用的是Python 2.7.谢谢!
在Python中,我想使用分隔符列表拆分字符串.分隔符可以是逗号或分号.应删除空格,除非它位于非空格,非分隔符的中间,在这种情况下应保留空格.
测试用例1:ABC,DEF123,GHI_JKL,MN OP
测试用例2:ABC;DEF123;GHI_JKL;MN OP
测试用例3:ABC ; DEF123,GHI_JKL ; MN OP
听起来像正则表达式的情况,这很好,但如果它更容易或更干净,以另一种方式,甚至更好.
谢谢!
在这个相关的问题中,我注意到Visual Studio的调试器能够枚举System.__ComObject
引用的属性,这是"当包装器类型不明确时使用的隐藏类型" - 例如,当您从另一个获取它时获得的对象类型COM对象,不要自己实例化它:
此外,如果您只是将COM对象的标识符写入立即窗口,其属性和值将被类似地转储:
请注意,这与VS2010的" 动态视图 " 是分开的,我认为它使用IDispatch
COM反射来枚举COM对象的属性,而不使用PIA和.NET反射.我正在使用的对象没有实现IDispatch
(也没有实现IProvideClassInfo
),因此,"动态视图"无法获取有关它们的任何信息:
有趣的是,SharpDevelop的调试器无法列出System.__Comobject
s(例如point.Envelope
)的成员,只能列出强类型的RCW(例如point
).
那么Visual Studio如何才能做到呢?
我相信在这种情况下,这是因为主互操作程序集存在这些对象支持的接口的定义,并且Visual Studio可能使用反射来枚举支持的接口和属性.那是准确的吗?如果是这样,它是如何工作的?
对于初学者,它如何访问PIA?它只查看当前加载的PIA还是动态加载它们(如果是,如何)?它如何确定哪个界面可以有多个枚举属性?它似乎只使用一个,而不一定是第一个.从我正在使用的API(ArcObjects)的文档中,这些对象的默认接口是IUnknown
,所以它不仅仅使用默认接口.
在屏幕截图的示例中,它枚举成员的IEnvelope
接口是接口,它继承自IGeometry
接口.VS2010如何知道不会枚举成员IGeometry
,在我的测试中,如果你只是枚举PIA中的所有接口类型,它首先出现?一些非常聪明的事情或者我错过了一些明显的东西?
我问的原因是LINQPad 的开发人员似乎愿意实现相同的功能,如果他知道VS如何做到这一点.所以这里一个好的答案可以帮助改进这个非常受欢迎的工具.
鉴于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) 我正在使用LINQPad快速开发小型ArcObjects(一个基于COM的ESRI ArcGIS软件库)应用程序,并且已经成功地将它用于Dump()
我从.NET初始化的COM对象的属性,但任何COM对象从现有COM对象获得的只是作为System.__ComObject
引用转储,这不是特别有用:
这个帮助主题解释了为什么会发生这种情况,我认为我理解,但是想知道解决这种行为有哪些选择,特别是在使LINQPad(甚至)功能更强大的背景下.
有趣的是,Visual Studio的调试器能够显示这些对象的属性,甚至是值类型的值:
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方法.
这可能是一个愚蠢的问题,但......
假设您有一句话:
快速的棕色狐狸
或者你可能会得到一句话:
快速的棕色狐狸跳过懒狗
简单的正则表达式(\ 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) 这是一个片段,演示如何使用$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)python ×4
com ×2
com-interop ×2
linqpad ×2
regex ×2
2-digit-year ×1
angularjs ×1
arcobjects ×1
c# ×1
date ×1
dictionary ×1
javascript ×1
list ×1
python-2.7 ×1
rcw ×1
regex-group ×1
separator ×1
split ×1
y2k ×1