使用正则表达式去除特殊字符和空格,然后将其转换为驼峰式大小写。

3
我将尝试使用正则表达式从问题名称中生成C#属性。我有100多个问题需要处理,而且这项任务可能会重复出现,因此值得付出努力。
需要转换的字符串:
Do you own your property?
How is it owned?
Relationship to other registered owner
Estimated value of Estate (joint)
Address Line 1
Are any of the children under 18 years old?
Are you interested in safeguarding your assets for your children/beneficiaries?

预期结果:

public string DoYouOwnYourProperty { get; set;}
public string HowIsItOwned { get; set;}
public string RelationshipToOtherRegisteredOwner { get; set;}
public string EstimatedValueOfEstateJoint { get; set;}
public string AddressLine1 { get; set;}
public string AreAnyOfTheChildrenUnder18YearsOld { get; set;}
public string AreYouInterestedInSafeguardingYourAssetsForYourChildrenBeneficiaries { get; set;}

我是一个有用的助手,可以为您翻译文本。
我在四处搜寻时发现了一些与正则表达式相关的问题,其中他们会删除特殊字符在代码中将其大写,但是仅使用正则表达式不会同时执行两者。
从这里开始
([a-zA-z])( [a-zA-z])([a-zA-z])

替换:
\1\U2\3

然而,第二组不会被大写,并且我不确定如何为每个内容附加public string{ get; set;},而不是每个组。

大写转换不是“标准”的正则表达式操作,它取决于工具。你在使用什么? - Lucas Trzesniewski
@LucasTrzesniewski 我在开发正则表达式时使用101regex,而在替换方面我打算使用notepad++。 - Matas Vaitkevicius
2个回答

1

在Notepad++中:

步骤1:去除标点符号

替换以下模式:

[^\w\s]

使用空字符串。

步骤2:去除空格并将字母变成大写

替换以下模式:

[^\S\r\n]+(\d*\p{L}|\d+)

使用这个代码:
\U$1

步骤三:添加属性语法

替换以下模式:

^(\S+)$

使用此代码:

public string $1 { get; set; }

作为参考,以下是Notepad++在正则表达式替换中使用的内容:Boost-Extended Format String Syntax


再次你好,它在太多情况下都会失败,其中之一是属性中的数字。收件人姓氏 收件人头衔 地址行1 地址行2 地址行3 地址行4 地址行5 地址行6 邮政编码 - Matas Vaitkevicius
哎呀,我没考虑到数字。我已经纠正了模式,它们应该可以工作了。 - Lucas Trzesniewski
单个案例中的“ Estate(joint)的预估价值”无法处理100+。但仍有一个案例可以手动完成,感谢你,伙计。 - Matas Vaitkevicius
我倒置了前两个步骤,现在应该可以适用于你的最后一个案例了。 - Lucas Trzesniewski
完美运作,真正的专业。谢谢。 - Matas Vaitkevicius

1
你不能使用 regex101.com,因为它的可访问引擎不支持 \U\L 替换标记。不过 Notepad++ 可以。
首先,使用此正则表达式匹配那些空格/标点符号及其后面的字符:
[^[:alnum:]\n\r](\w)?

将其替换为
\U$1

enter image description here 第二步,匹配最近的整行:

^(?i)([a-z\d]+)$

将其翻译为中文:

并替换为:

public string $1 { get; set;}

enter image description here


嗨,没有处理数字情况。 执行人名称 地址行1 地址行2 地址行3 地址行4 地址行5 地址行6 邮政编码 家庭电话号码 手机号码 电子邮件 给律师的注意事项 您有18岁以下的孩子吗? 您有执行人吗? - Matas Vaitkevicius
更新后,[^[:alnum:]\n\r]\d*(\w)? 将删除产生 6 x 地址行的数字,而最后一个地址行没有数字(地址行 1 和地址行 2 是两个不同的属性)。 - Matas Vaitkevicius
@LIUFA 我回滚了第一个正则表达式,修改了第二个。请查看更新。 - revo
非常完美,非常感谢。我已经接受了@Lucas的答案,但我通过+您的其他答案给了您同样数量的声望。 - Matas Vaitkevicius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接