我在我的正则表达式身体中发现了这些东西,但我不知道我能用它们做什么.有人有例子,所以我可以尝试了解它们是如何工作的吗?
(?!) - negative lookahead
(?=) - positive lookahead
(?<=) - positive lookbehind
(?<!) - negative lookbehind
(?>) - atomic group
Run Code Online (Sandbox Code Playgroud) 如何将PascalCase字符串转换为underscore_case字符串?我也需要将点转换为下划线.
例如.兑换
TypeOfData.AlphaBeta
Run Code Online (Sandbox Code Playgroud)
成
type_of_data_alpha_beta
Run Code Online (Sandbox Code Playgroud) 我编写了下面的函数,将下划线转换为camelcase,第一个单词为小写,即"get_this_value" - >"getThisValue".此外,我还要求保留前导和尾随下划线以及双重(三重等)下划线,如果有的话,即
"_get__this_value_" -> "_get_ThisValue_".
Run Code Online (Sandbox Code Playgroud)
代码:
def underscore_to_camelcase(value):
output = ""
first_word_passed = False
for word in value.split("_"):
if not word:
output += "_"
continue
if first_word_passed:
output += word.capitalize()
else:
output += word.lower()
first_word_passed = True
return output
Run Code Online (Sandbox Code Playgroud)
我感觉上面的代码是用非Pythonic风格编写的,虽然它按预期工作,所以看看如何简化代码并使用列表推导等编写代码.
我正在尝试创建一个泛型函数来替换嵌套字典的键中的点.我有一个非泛型函数,深入3级,但必须有一种方法来做这个泛型.任何帮助表示赞赏!我的代码到目前为止:
output = {'key1': {'key2': 'value2', 'key3': {'key4 with a .': 'value4', 'key5 with a .': 'value5'}}}
def print_dict(d):
new = {}
for key,value in d.items():
new[key.replace(".", "-")] = {}
if isinstance(value, dict):
for key2, value2 in value.items():
new[key][key2] = {}
if isinstance(value2, dict):
for key3, value3 in value2.items():
new[key][key2][key3.replace(".", "-")] = value3
else:
new[key][key2.replace(".", "-")] = value2
else:
new[key] = value
return new
print print_dict(output)
Run Code Online (Sandbox Code Playgroud)
更新:回答我自己的问题,我使用json object_hooks做了一个解决方案:
import json
def remove_dots(obj):
for key in obj.keys():
new_key = key.replace(".","-")
if …Run Code Online (Sandbox Code Playgroud) 我经常从协作者处获得数据集,这些数据集在数据集中具有不一致的变量/列命名.我的首要任务之一是重命名它们,我想在R内部完全解决这个问题.
as.Given <- c("ICUDays","SexCode","MAX_of_MLD","Age.Group")
underscore_lowercase <- c("icu_days", "sex_code", "max_of_mld","age_group")
camelCase <- c("icuDays", "sexCode", "maxOfMld", "ageGroup")
Run Code Online (Sandbox Code Playgroud)
鉴于有关命名约定不同的意见,并本着什么Python中提出,有哪些途径,从去as.Given到underscore_lowercase和/或camelCase作为R用户指定的方式吗?
编辑: 还在R/regex中找到了这个相关的帖子,特别是@rengis的答案.
我是Python的新手,我试图将单词中的所有大写字母替换为下划线,例如:
ThisIsAGoodExample
Run Code Online (Sandbox Code Playgroud)
应该成为
this_is_a_good_example
Run Code Online (Sandbox Code Playgroud)
关于如何实现这一目标的任何想法/提示/链接/教程?
我无法弄清楚如何在python中替换字符串中的第二个大写字母.
例如:
string = "YannickMorin"
Run Code Online (Sandbox Code Playgroud)
我希望它成为yannick-morin
到目前为止,我可以通过执行string.lower()来使它全部小写,但是当它找到第二个大写字母时如何设置破折号.
我正在尝试使用我在此处找到的正则表达式将 CamelCase 转换为 Snake_case 。这是我正在使用的代码片段:
in := "camelCase"
var re1 = regexp.MustCompile(`(.)([A-Z][a-z]+)`)
out := re1.ReplaceAllString(in, "$1_$2")
Run Code Online (Sandbox Code Playgroud)
正则表达式将匹配lCase. $1这里 isl和$2is Case,所以使用替换字符串"$1_$2"应该会导致camel_Case. 相反,它会导致cameCase.
将替换字符串更改为"$1_"结果came。如果我将其更改为"$1+$2",结果将camel+Case如预期(请参阅游乐场)。
现在,我的解决方法是用作"$1+$2"替换字符串,然后使用strings.Replace将加号更改为下划线。这是一个错误还是我在这里做错了什么?
基本上,相反本.这是我的尝试,但它不起作用.
def titlecase(value):
s1 = re.sub('(_)([a-z][A-Z][0-9]+)', r'\2'.upper(), value)
return s1
Run Code Online (Sandbox Code Playgroud) 我设法使用正则表达式拼凑一个python函数将驼峰转换为蛇案例,它适用于我的所有测试用例,但我还有几个问题.
1)三个陈述中的每一个实际上做了什么?
import re
test_cases = list()
test_cases.append('camelCase')
test_cases.append('camelCaseCase')
test_cases.append('camel2Case')
test_cases.append('camel12Case')
test_cases.append('camel12Case')
test_cases.append('camelCaseURL')
test_cases.append('camel2CaseURL')
test_cases.append('camel12CaseURL')
test_cases.append('camel12Case2URL')
test_cases.append('camel12Case12URL')
test_cases.append('CamelCase')
test_cases.append('CamelCaseCase')
test_cases.append('URLCamelCase')
def camel_to_snake(string):
string = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', string)
string = re.sub('(.)([0-9]+)', r'\1_\2', string)
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', string).lower()
for string in test_cases:
print(string + ' -> ' + camel_to_snake(string))
Run Code Online (Sandbox Code Playgroud)
结果如下:
camelCase -> camel_case
camelCaseCase -> camel_case_case
camel2Case -> camel_2_case
camel12Case -> camel_12_case
camel12Case -> camel_12_case
camelCaseURL -> camel_case_url
camel2CaseURL -> camel_2_case_url
camel12CaseURL -> camel_12_case_url
camel12Case2URL -> camel_12_case_2_url
camel12Case12URL -> camel_12_case_12_url
CamelCase -> …Run Code Online (Sandbox Code Playgroud) 我试图让 Marshmallow-SQLAlchemy 反序列化具有嵌套对象的对象,而不指定嵌套对象的外键(应该是父对象的主键)。这是一个独立的示例:
# Python version == 3.8.2
from datetime import datetime
import re
# SQLAlchemy == 1.3.23
from sqlalchemy import func, create_engine, Column, ForeignKey, Text, DateTime
from sqlalchemy.ext.declarative import as_declarative, declared_attr
from sqlalchemy.orm import relationship, sessionmaker
# marshmallow==3.10.0
# marshmallow-sqlalchemy==0.24.2
from marshmallow import fields
from marshmallow.fields import Nested
from marshmallow_sqlalchemy import SQLAlchemyAutoSchema
################################################################################
# Set up
################################################################################
engine = create_engine("sqlite:///test.db")
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
################################################################################
# Models
################################################################################
@as_declarative()
class Base(object):
@declared_attr
def __tablename__(cls):
# From …Run Code Online (Sandbox Code Playgroud) 我能够将字符串转换MyClassName为my_class_name使用正则表达式
但是我的解决方案不起作用MyOtherTClassName,应该转换为my_other_t_class_name.
另外,这也不起作用ClassNumber1,应该将其转换为class_number_1
没有进入我的解决方案,这还不够好,我想帮助转换正则表达式代码:
MyClassName -> my_class_nameMyOtherTClassName -> my_other_t_class_nameMyClassWith1Number -> my_class_with_1_number谢谢,
盖伊
python ×7
regex ×5
replace ×2
string ×2
c# ×1
camelcasing ×1
character ×1
dictionary ×1
go ×1
javascript ×1
lookaround ×1
marshmallow ×1
nested ×1
r ×1
sqlalchemy ×1
uppercase ×1