我已经通过Stackoverflow上的其他问题阅读了,但仍然没有更接近.对不起,如果已经回答了这个问题,但我没有得到任何建议.
>>> import re
>>> m = re.match(r'^/by_tag/(?P<tag>\w+)/(?P<filename>(\w|[.,!#%{}()@])+)$', '/by_tag/xmas/xmas1.jpg')
>>> print m.groupdict()
{'tag': 'xmas', 'filename': 'xmas1.jpg'}
Run Code Online (Sandbox Code Playgroud)
一切都很好,然后我尝试用挪威字符(或更像unicode)的东西:
>>> m = re.match(r'^/by_tag/(?P<tag>\w+)/(?P<filename>(\w|[.,!#%{}()@])+)$', '/by_tag/påske/øyfjell.jpg')
>>> print m.groupdict()
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'groupdict'
Run Code Online (Sandbox Code Playgroud)
如何匹配典型的unicode字符,例如øæå?我希望能够在上面的标签组和文件名的标签组中匹配这些字符.
python regex unicode non-ascii-characters character-properties
我有一个字符串,我想从中提取3组:
'19 janvier 2012' -> '19', 'janvier', '2012'
Run Code Online (Sandbox Code Playgroud)
月份名称可能包含非ASCII字符,因此[A-Za-z]对我不起作用:
>>> import re
>>> re.search(ur'(\d{,2}) ([A-Za-z]+) (\d{4})', u'20 janvier 2012', re.UNICODE).groups()
(u'20', u'janvier', u'2012')
>>> re.search(ur'(\d{,2}) ([A-Za-z]+) (\d{4})', u'20 février 2012', re.UNICODE).groups()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'groups'
>>>
Run Code Online (Sandbox Code Playgroud)
我可以使用,\w但它匹配数字和下划线:
>>> re.search(ur'(\w+)', u'février', re.UNICODE).groups()
(u'f\xe9vrier',)
>>> re.search(ur'(\w+)', u'fé_q23vrier', re.UNICODE).groups()
(u'f\xe9_q23vrier',)
>>>
Run Code Online (Sandbox Code Playgroud)
我尝试使用[:alpha:],但它不起作用:
>>> re.search(ur'[:alpha:]+', u'février', re.UNICODE).groups()
Traceback (most recent call last):
File "<stdin>", …Run Code Online (Sandbox Code Playgroud) 我并不十分确定这种类型的正则表达式的正确措辞是什么,但基本上我要做的是匹配任何以"/"开头但后面没有"bob /"的字符串,作为示例.
所以这些匹配:
/tom/
/tim/
/steve
Run Code Online (Sandbox Code Playgroud)
但这些不会
tom
tim
/bob/
Run Code Online (Sandbox Code Playgroud)
我确定答案非常简单,但我很难在任何地方寻找"正则表达式".我确信有一个更好的词,我想要什么会带来好结果,但我不确定它会是什么.
编辑:我已经更改了标题,以指出我正在寻找的正确名称
我有一个解析电视剧集文件名的脚本(例如show.name.s01e02.avi),抓取剧集名称(来自www.thetvdb.com API)并自动将它们重命名为更好的名称(显示名称 - [01x02] ]的.avi)
该脚本工作正常,直到你尝试在具有Unicode显示名称的文件上使用它(我从未真正考虑过的事情,因为我拥有的所有文件都是英文的,所以大部分文件全部都在内[a-zA-Z0-9'\-])
如何允许正则表达式匹配重音字符等?目前正则表达式的配置部分看起来像..
config['valid_filename_chars'] = """0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@£$%^&*()_+=-[]{}"'.,<>`~? """
config['valid_filename_chars_regex'] = re.escape(config['valid_filename_chars'])
config['name_parse'] = [
# foo_[s01]_[e01]
re.compile('''^([%s]+?)[ \._\-]\[[Ss]([0-9]+?)\]_\[[Ee]([0-9]+?)\]?[^\\/]*$'''% (config['valid_filename_chars_regex'])),
# foo.1x09*
re.compile('''^([%s]+?)[ \._\-]\[?([0-9]+)x([0-9]+)[^\\/]*$''' % (config['valid_filename_chars_regex'])),
# foo.s01.e01, foo.s01_e01
re.compile('''^([%s]+?)[ \._\-][Ss]([0-9]+)[\.\- ]?[Ee]([0-9]+)[^\\/]*$''' % (config['valid_filename_chars_regex'])),
# foo.103*
re.compile('''^([%s]+)[ \._\-]([0-9]{1})([0-9]{2})[\._ -][^\\/]*$''' % (config['valid_filename_chars_regex'])),
# foo.0103*
re.compile('''^([%s]+)[ \._\-]([0-9]{2})([0-9]{2,3})[\._ -][^\\/]*$''' % (config['valid_filename_chars_regex'])),
]
Run Code Online (Sandbox Code Playgroud) 在JavaScript中:
"ab abc cab ab ab".replace(/\bab\b/g, "AB");
Run Code Online (Sandbox Code Playgroud)
正确地给了我:
"AB abc cab AB AB"
Run Code Online (Sandbox Code Playgroud)
当我使用utf-8字符时:
"?? ??? ??? ?? ??".replace(/\b??\b/g, "AB");
Run Code Online (Sandbox Code Playgroud)
在字边界运营商似乎并没有工作:
"?? ??? ??? ?? ??"
Run Code Online (Sandbox Code Playgroud)
这个问题有方法解决吗?
如何修剪a string(6) " page",第一个空格是0xc2a0不间断空格?
我试过trim()和preg_match('/^\s*(.*)\s*$/u', $key, $m);.
另一个问题:我怎样才能可靠地复制这些字符?它们似乎被转换为"普通"空间,这使得调试变得困难.
我想计算两个任意句子彼此之间的相似程度.例如:
- 一位数学家找到了解决问题的方法.
- 这个问题是由一位年轻的数学家解决的.
我可以使用标记器,词干分析器和解析器,但我不知道如何检测这些句子是否相似.
我有这样的字符串
"Position, fix, dial"
Run Code Online (Sandbox Code Playgroud)
我想用转义双引号(\")替换最后一个双引号(")
字符串的结果是
"Position, fix, dial\"
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点.我知道替换第一次出现的字符串.但不知道如何替换最后一次出现的字符串
我知道mv将文件从一个地方移动到另一个地方的命令,但是如何将所有文件从一个目录移动到另一个目录(包含一堆其他文件),如果该文件已存在则覆盖?
我有一个使用基于Javascript的规则引擎的应用程序.我需要一种方法将常规直引号转换为卷曲(或智能)引号.只做一个string.replacefor 是很容易的["],只有这只会插入一个卷曲引用的情况.
我能想到的最好的方法是用左边的卷曲引号替换第一次出现的引用,用左边的代码替换每个其他的引用,其余的右边卷曲.
有没有办法使用Javascript实现这一目标?
regex ×6
unicode ×5
python ×3
javascript ×2
utf-8 ×2
java ×1
linux ×1
nlp ×1
opennlp ×1
perl ×1
php ×1
quotes ×1
replace ×1
similarity ×1
smart-quotes ×1
stanford-nlp ×1
string ×1
unix ×1
whitespace ×1